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>
