ejs基本使用方法

  • EJS是高效的嵌入式 JavaScript 模板引擎
  • EJS 是一套简单的模板语言,帮你利用普通的 JavaScript 代码生成 HTML 页面
  • EJS 没有如何组织内容的教条,也没有再造一套迭代和控制流语法,有的只是普通的 JavaScript 代码而已。

ejs语法总结

  1. ejs中书写js变量:<%= 变量 %>
  2. ejs中书写js表达式:<% js表达式 %>,每一行js表达式都要加,html代码则不用
    • 注意:如果js表达式中间插入了html代码,那么js表达式需要分开包裹,如下面“ejs循环”中的例子。如果js表达式只是单纯换行则只需一个尖括号包裹,如下“ejs引用组件”中的例子。
    • 区分ejs中书写js变量与表达式:需要输出的变量才有等号!
  3. ejs中引用ejs组件:<%- include('相对路径/组件ejs文件名',{变量1,变量2,...,变量x}) %>
    • 组件中需要的变量通过参数2进行传递
    • ejs文件中可直接定义组件,文件名即为组件名
  4. 注意:ejs模板最后编译为html代码,所以ejs中也可正常使用script标签来书写js代码

为何路由可对应不同ejs文件

  1. koa2框架中已帮我们在app.js中注册了ejsapp.js中注册了ejs
  2. 所以路由中只需要写文件名将变量传过去ejs即可:index.ejs与routes-index.jsindex.ejs接受到变量后即可显示:显示效果

ejs变量

  • ejs中的变量语法<%= 变量 %>

例子

  • 传递变量的路由、接收并显示变量的ejs文件显示效果例子

错误处理

  • 当我们在ejs中使用了并未从路由中传递过来的变量时,

例子

  1. ejs文件和显示页面:ejs文件和显示页面
  2. 原因:app.js中的onerror()处理了错误,显示了一个前端页面app.js和控制台此时可在控制台看到报错原因
  3. 解决方法:变量前加locals.:解决方法这样即使没有传递该变量就使用了也不会报错,它相当于传了一个空,即<p> </p>
  4. 总结:在ejs模板中,不确定是否会传值过来的变量使用locals.变量,防止因未传变量而报错

ejs判断

  • ejs中书写js表达式时语法:<% js表达式 %>,每一行js表达式都要加,html代码则不用
    • 注意:如果js表达式中间插入了html代码,那么js表达式需要分开包裹,如下面“ejs循环”中的例子。如果js表达式只是单纯换行则只需一个尖括号包裹,如下“ejs引用组件”中的例子。
  • 区分ejs中书写js变量与表达式:需要输出的变量才有等号!
  • 注意:ejs模板最后编译为html代码,所以ejs中也可正常使用script标签来书写js代码

例子

  1. routes-index.js中传入变量isMe:routes-index.js
  2. views-index.ejs中做判断:views-index.ejs
  3. 测试测试

ejs引用组件

  • ejs中引用组件的语法<%- include('相对路径/组件ejs文件名',{变量1,变量2,...,变量x}) %>
    • 组件中需要的变量通过参数2进行传递
    • ejs文件中可直接定义组件,文件名即为组件名

例子

  1. views文件夹下新建widgets文件夹,用于存放组件
  2. widgets文件夹下新建user-info.ejs,将ejs判断例子中添加的逻辑挪过去创造组件user-info.ejs
  3. views-index.ejs中引用组件views-index.ejs
  4. 测试:测试

ejs循环

  • 和ejs判断类似

例子

  1. routes-index.js中传入数组blogListroutes-index.js
  2. widgets文件夹下新建blog-list.ejs组件,循环渲染blogListblog-list.ejs
    • 注意:html属性值需要引号
  3. views-index.ejs中引用组件views-index.ejs
  4. 测试:测试

提交项目到coding

  1. 提交前最好使用**git diff**看看自己提交的是否包含什么不需要提交的
  2. 添加文件到本地仓库:git add .
  3. 提交文件到本地仓库:git commit -m "feat:演示ejs"
  4. 本地文件推送到coding服务器:git push origin master(master也可以是其他分支)

补充:SSR与SP

  • 所有的服务端渲染引擎(比如ejs、vue、react),本质上都是SSR(server side render)
  • 通过服务端的能力将页面渲染出来的就是SSR
    • 比如,在上面“ejs循环”的例子中,blog-list.ejs组件中可以通过判断blogList的长度然后将其每一条都显示出来。服务端通过模板输入浏览器的是一个静态的结果,这样的形式就是SSR静态的结果
  • 与SSR相对的就是SP(前端渲染),比如AJAX。SP是不会显示一堆html代码的,只会有一个JS代码显示在浏览器上。通过JS的能力将页面渲染出来的就是SP
,