EJS官网
Eggjs 也提供了插件
为什么我们还需要学习后端模板引擎
- 后端渲染由来已久,渲染性能得到业界认可
- 利于 SEO 优化,对纯展示类网站体验较好
- react、vue 都是对展示内容进行动态渲染,浏览器就很难直接拿到页面中的内容
- 对前后端分离开发模式的补充(单点登录的登录页面)
简单入门
配置
plugin.js
exports.ejs = {
enable: true,
package: 'egg-view-ejs',
};
再到 config.default.js 中对视图以及ejs 进行配置
config.view = {
mapping: {
'.html': 'ejs',// 意思是 遇到html 文件就使用 ejs模板引擎进行渲染
},
};
config.ejs = {};
//后面慢慢说
ctx.render
ctx.render()
对页面进行渲染,接收三个参数:
- name: 需要渲染的 文件名称
- locals: 页面的一些属性
- options: 当前视图的一些配置
并且其返回的是 Promise
所以还需要用await
对其进行修饰
user.js
async index() {
const { ctx } = this;
// ctx.body = 'hi, user index';
await ctx.render('user.html', { id: 100, name: 'admin' });
}
其中 html 默认放在 app/view 中,也进行配置
const path = require('path') //nodejs 内置的模块:用于解析文件路径
config.view = {
root:path.join(appInfo.baseDir, "app/html")
}
这样默认文件夹就改为 app下的html 文件夹了。如果想要多个文件夹,将 root 设置为数组形式即可
root: [...,...].join(",")
参数
ejs 中接收参数的方式:
user.html
id:<%= id %>
<br />
name:<%= name %>
这样渲染数组
<ul>
<% for(var i = 0; i < lists.length; i++){ %>
<li>
<%= lists[i] %>
</li>
<% } %>
</ul>
注释
<%# 注释 %>
如果不喜欢用%
,也可以去 config.default.js
对ejs
进行全局配置
config.ejs = {
delimiter: '$',
};
也可以单独配置
await ctx.render(
'user.html',
{
id: 100,
name: 'admin',
lists: ['java', 'php'],
},
{
delimiter: '$',
}
);
公共头部&尾部
创建一个 user-header.html,然后再在 user.html 中引入
<% include user-header.html %>
静态资源的使用与配置
静态资源默认存放在 public 中
也可以对其进行配置
config.default.js
config.static = {
prefix: "/public/", //url的前缀
dir:path.join(appInfo.baseDir, "app/public") //文件路径
};
这样引用
user.html
<link rel="stylesheet" type="text/css" href="public/css/user.css" />
<script src="public/js/user.js"> </script>