上QQ阅读APP看书,第一时间看更新
4.8 模板渲染
模板引擎能够在应用中使用静态模板文件,在运行时,可以根据实际变量替换模板中的变量,并将渲染后的HTML发送给客户端。
Express可以使用jade、pug、mustache和ejs作为模板引擎,默认的是jade,本书中使用ejs作为模板引擎。
要渲染模板文件,需要安装对应的模板引擎,还需要更改app设置。
4.8.1 使用ejs模板
ejs是接近普通HTML语言的模板,通过标记来赋予HTML模板动态化的能力。
使用npm安装ejs模块:
npm install ejs –save
设置应用模板配置:
app.set('views', './templates'); app.set('view engine', 'ejs');
以下是完整的示例:
渲染模板时传递了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 %> <% }) %>
以下是一个完整的示例:
访问http://localhost:8080时,页面标题为“用户列表”,页面主体为空白。
访问http://localhost:8080?show=1时,页面标题为“用户列表”,页面主体如下:
1-张三
2-夏磊