[关闭]
@Wangww0925 2019-08-07T02:35:54.000000Z 字数 3440 阅读 211

ejs 后台模板引擎

模板引擎


ejs模板引擎为后台程序模板,相对应的前台程序模板有三大框架vue、reactNavite、angular

ejs模板引擎是npm的第三方模块

后台模板,著名的有两个 【ejs 和 jade(书写困难,严格的缩进) 】

模板引擎的原理: 使用正则表达式,将模板中的指定内容进行正则匹配替换为其他内容,实现数据绑定,最终形成一个完整的html字符串

后台模板引擎的缺点

前后台没有完全分离 (前台处理页面,后台处理数据)

实现数据动态的改变非常困难,例如下拉刷新加载更多

重要的事说三遍: 以下结合NodeJs使用。以下结合NodeJs使用。以下结合NodeJs使用。


使用

1、 安装 ejs
安装命令 npm install ejs

如果报错:

  1. npm ERR! cb() never called!
  2. npm ERR! This is an error with npm itself. Please report this error at:
  3. npm ERR! <https://npm.community>
  4. npm ERR! A complete log of this run can be found in:
  5. npm ERR! C:\Users\Dooban000\AppData\Roaming\npm-cache\_logs\2019-01-28T06_12_11_409Z-debug.log

则使用 cnpm install ejs

2、 创建 node执行文件 test.js

  1. var ejs = require("ejs"); // 引入模板ejs模块
  2. var string = "我喜欢吃<%=name %>"; // 创建ejs模板
  3. // 数据
  4. var directory = {
  5. name: 'apple'
  6. }
  7. // 数据替换: ejs.render(模板,替换数据,配置选项)
  8. var html = ejs.render(string,directory)
  9. console.log(html);

3、 执行命令 node test.js

4、 效果图
image_1d29ik7nk1t2440mc571n4s1hmn9.png-68.6kB


赋值:

  1. <a href="<%=属性名%>">

逻辑判断:

  1. <%if(i>2){%>
  2. <li><%=arr[i].name%>&emsp;<%=arr[i].des%></li>
  3. <%}%>

循环:

  1. <% for(var i = 0; i<arr.length; i++){ %>
  2. <li><%=arr[i].name %></li>
  3. <%}%>

例子
node 执行的文件

  1. var ejs = require("ejs"); // 引入模板ejs模块
  2. // 创建ejs模板
  3. var string = "<ul> \
  4. <% for(var i=0; i<arr.length;i++){ %> \
  5. <li><%=arr[i] %></li> \
  6. <% } %> \
  7. </ul>";
  8. // 数据
  9. var directory = {
  10. arr:["html","css","javscript","jquery"]
  11. };
  12. // 数据替换: ejs.render(模板,替换数据,配置选项)
  13. var html = ejs.render(string,directory);
  14. console.log(html);

效果图
image_1d29ivr5i13bi1tp3c3114tb129nm.png-83.2kB


引入外部ejs模板

demo下载 -1.5kB

  1. npm install
  2. node demo.js

例子
外部ejs模板 template/index.ejs

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <h1>EJS 模板</h1>
  9. <hr>
  10. <h3>我叫<%= name %>, 今年<%= age %>岁了</h3>
  11. <ul>
  12. <% for(var i=0; i<arr.length;i++){ %>
  13. <% if(i>2){ %>
  14. <li><%= arr[i].name %> <%= arr[i].des %></li>
  15. <% }else{ %>
  16. <li><%= arr[i].name %></li>
  17. <% } %>
  18. <%}%>
  19. </ul>
  20. </body>
  21. </html>

node执行文件

  1. var fs = require("fs");
  2. var ejs = require("ejs");
  3. var http = require("http");
  4. http.createServer((req,res)=>{
  5. fs.readFile("./template/index.ejs",(err,data)=>{
  6. var string = data.toString();
  7. var directory = {
  8. name:"www",
  9. age: 18,
  10. arr:[
  11. {"name":"html",des:"nice"},
  12. {"name":"css",des:"good"},
  13. {"name":"javascript",des:"great"},
  14. {"name":"jquery",des:"beautiful"},
  15. {"name":"nodejs",des:"prefect"}
  16. ]
  17. };
  18. var html = ejs.render(string,directory);
  19. res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
  20. res.end(html);
  21. })
  22. }).listen(8081);

效果图:
image_1d29jjbbb9e21dlc1llo2tv109413.png-26.3kB


引入外部ejs模板、数据

demo下载 2.2kB

  1. npm install
  2. node demo.js

例子
外部ejs模板 book.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <h1>BOOK书籍相关信息</h1>
  9. <table border="1px" cellspacing="2px">
  10. <tr>
  11. <th>title</th>
  12. <th>price</th>
  13. <th>author</th>
  14. </tr>
  15. <% for(var value of books){ %>
  16. <tr>
  17. <td><%= value.title %></td>
  18. <td><%= value.price %></td>
  19. <td><%= value.author %></td>
  20. </tr>
  21. <% } %>
  22. </table>
  23. </body>
  24. </html>

node执行文件

  1. var http = require("http");
  2. var fs = require("fs");
  3. var ejs = require("ejs");
  4. var url = require("url");
  5. http.createServer((req,res)=>{
  6. var pathname = url.parse(req.url).pathname;
  7. console.log(pathname)
  8. if(pathname == "/favicon.ico"){
  9. return;
  10. }
  11. if(pathname == "/"){
  12. fs.readFile("./book.html",(err,data)=>{
  13. if(err){
  14. console.log(err)
  15. }
  16. if(!err){
  17. var string = data.toString(); // 创建ejs模板
  18. fs.readFile("./books.json",(err,data)=>{
  19. var obj = JSON.parse(data);
  20. if(obj.code == 0){
  21. // 数据
  22. var directory = {
  23. books: obj.data
  24. };
  25. // 数据替换
  26. var html = ejs.render(string, directory);
  27. res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
  28. res.end(html)
  29. }else{
  30. res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
  31. res.end("<h1>请求错误</h1>")
  32. }
  33. })
  34. }
  35. })
  36. }
  37. if(pathname != "/"){
  38. res.writeHead(404,{"Content-Type":"text/html;charset=utf-8"});
  39. res.end("<h1>404</h1>")
  40. }
  41. }).listen(8081);

效果图:
image_1d29l36ubcf01o7k1d7tto6g6d1s.png-37.8kB


作者 wendy
2019 年 1月 21日

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注