![Node.js+Webpack开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/131/36862131/b_36862131.jpg)
上QQ阅读APP看书,第一时间看更新
4.8 模板渲染
模板引擎能够在应用中使用静态模板文件,在运行时,可以根据实际变量替换模板中的变量,并将渲染后的HTML发送给客户端。
Express可以使用jade、pug、mustache和ejs作为模板引擎,默认的是jade,本书中使用ejs作为模板引擎。
要渲染模板文件,需要安装对应的模板引擎,还需要更改app设置。
![](https://epubservercos.yuewen.com/1A2713/19549639501513406/epubprivate/OEBPS/Images/Figure-P80_92796.jpg?sign=1739302448-QtWe0PaV0Da49EhzPKA2XUYk25dQ6xnn-0-38ec167ab54403b6dea0ad9586f9f248)
4.8.1 使用ejs模板
ejs是接近普通HTML语言的模板,通过标记来赋予HTML模板动态化的能力。
使用npm安装ejs模块:
npm install ejs –save
设置应用模板配置:
app.set('views', './templates'); app.set('view engine', 'ejs');
以下是完整的示例:
![](https://epubservercos.yuewen.com/1A2713/19549639501513406/epubprivate/OEBPS/Images/Figure-P80_92799.jpg?sign=1739302448-Sb2dHU9i27riBWlteiALxcka3vHjkZJK-0-ccf82d5df10e1e9af991e4a0ae0c9354)
渲染模板时传递了title变量,可以在模板中获取到:
// templates/site/index.ejs <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title><%= title %></title> </head> <body> </body> </html>
<%=title%>是渲染变量的语法,title是在路由函数中传递的。
4.8.2 ejs语法
ejs的语法比较多,这里列举比较常用的语法。
转义输出,如果title字符串含有HTML代码,则最终显示时会被转义为实体字符。
<%= title %>
不转义输出,不转义HTML代码,存在XSS(一种客户端JS攻击手段)风险。
<%- title %>
(1)执行JS代码:
<% 代码 %>
(2)导入其他模板:
<% include 模板路径 %>
(3)逻辑判断:
<% if(condition) { %> // HTML代码 <% } %>
(4)循环:
<% list.forEach((item) => { %> <%= item %> <% }) %>
以下是一个完整的示例:
![](https://epubservercos.yuewen.com/1A2713/19549639501513406/epubprivate/OEBPS/Images/Figure-P81_92807.jpg?sign=1739302448-vkdThazv1gcI6SktC86hRXVDIY3VLRTb-0-bd82d102b96c6164d5ad4fae09585942)
![](https://epubservercos.yuewen.com/1A2713/19549639501513406/epubprivate/OEBPS/Images/Figure-P82_92808.jpg?sign=1739302448-XXnli5EknDL7teJPNK7zhRNl5KEjrb0M-0-05a8de4f96dccf62936d5244e3f3d980)
访问http://localhost:8080时,页面标题为“用户列表”,页面主体为空白。
访问http://localhost:8080?show=1时,页面标题为“用户列表”,页面主体如下:
1-张三
2-夏磊