使用nodejs+ejs模板轻松从头搭建网站相比之下,ejs的语法过于简单。如果你会写html和简单的JavaScript,或者你用jsx写过react,那么ejs对你来说很容易。简单两步:在html中写上%标签包裹的js语法,将html后缀的文件后缀替换成ejs。很适合结合nodejs开发网站,因为它是基于node生态的模板。它只需要简单。配置可以在节点项目中运行。ejs有效地结合了模板和数据,可以快速高效地构建HTML页面。每个ejs都可以用作html或组件。具体的ejs语法可以参考ejs文档。第一步:使用koa搭建服务器。先初始化项目,在终端执行npminitnpminstallkoa新建app.js入口文件,代码如下:constkoa=require('koa')constapp=newkoa()app.use(async(ctx,next)=>{console.log(ctx.request.path)if(ctx.request.path==='/index'){//首页ctx.response.status=200ctx.response.body='index'}elseif(ctx.request.path==='/hello'){//你好页面ctx.response.status=200ctx.response.body='helloworld'}else{ctx.throw(404,'Notfound')//404}awaitnext()})app.listen(3000,function(){console.log('koaapplicationstarts!')})如上代码所示,根据参数ctx,获取访问的路径path,然后分别处理不同的路径。终端运行npmapp.js启动koa服务看到效果如下:这是一个简单的koa项目,监听3000启动node服务,index页面和hello页面分别显示不同的内容。第一步已经完成,下一步就是将ejs模板引擎集成到koa项目中。第二步:集成ejs模板引擎,创建一个views目录,将所有的ejs模板文件放在该目录下。作为演示,我们首先新建一个index.ejs。此时koa无法识别ejs后缀的文件。我们需要使用app.use注册ejs后缀的文件,并关联koa和views目录下所有ejs后缀的文件。首先安装koa-viewsnpminstallkoa-views在app.js中加入如下代码:constpath=require('path')constviews=require('koa-views');app.use(views(path.join(__dirname,'./views'),{extension:'ejs'}))并修改以下代码app.use(async(ctx,next)=>{console.log(ctx.request.path)if(ctx.request.path==='/index'){//Home//ctx.response.status=200//ctx.response.body='index'awaitctx.render('index')}elseif(ctx.request.path==='/hello'){//你好页面ctx.response.status=200ctx.response.body='helloworld'}else{ctx.throw(404,'Notfound')//404}awaitnext()})ctx.render('index')将index.ejs渲染成html文件,如图:重新运行npmapp.js,启动服务,刷新index页面,即可看到ejs模板已经编译成一个html页面,如下图所示:在实际项目中应用koa+ejs。如果您需要快速建立网站,这是一个很好的解决方案。可以用koa,当然也可以用node或者express框架,因为ejs是node生态的一部分。所以你可以使用任何节点框架。在实际项目中,我们可能会使用koa-router来管理多个路由,并在每个路由中渲染对应的ejs文件,如图:demo示例以上只是简单快速搭建静态网站的介绍.我们在实际项目中会出现越来越复杂的页面,不仅是静态页面,还有大量的表单、列表等页面需要和接口进行连接调试,所以也会有一些ejs模板需要动态处理。当然也支持ejs模板语法。对于如何获取动态数据和渲染动态页面,这里有两种解决方案:后端节点服务直接连接数据库,查询数据后返回ejs页面。根据ejs语法,我们从路由中获取变量,并在ejs模板中渲染;此时整个node项目的前后端密不可分。Node用于后端服务和前端渲染。如果是复杂的项目,开发人员的开发量可能会比较大。当然,对于全栈开发工程师或者创业公司来说,这些都没什么好担心的。也可以在路由中使用请求库的第三方接口请求(如ajax、axios、http、fetch),直接在ejs模板中获取数据渲染。项目交给前端开发者,后端技术栈不限。前端只需要像开发Vue项目一样调用接口即可。但这样做的缺点是如果界面加载太慢,会导致整个ejs页面空白,所以这个方案需要格外注意渲染和加载调优。
