- 原文地址(本人博客):www.waylon.online/blog?id=f8d…
前言
模板引擎是一种用于呈现动态HTML视图的工具,它可以将数据和逻辑与静态HTML文件结合在一起,以生成响应输出。
在我的上家公司,我们的模版引擎用的是PHP的Blade
,与Java的JSP
一样,这些模版引擎都需要一定的后端语言学习成本,到了现在这家公司发现其实也可以通过前端去实现,那就是本篇文章我要介绍的EJS
。
正文
前置条件
- 安装依赖(这里以Express作为示例)
npm install ejsnpm install expressnpm install ejs npm install expressnpm install ejs npm install express
- 安装对应的vscode插件
这里我用的是EJS language support
规范
以下只介绍几个比较重要的ejs规范:
标签含义
<%
‘script’ 标签,用于流程控制,无输出。<%_
删除其前面的空格符<%=
输出数据到模板(输出是转义 HTML 标签)<%-
输出非转义的数据到模板<%#
注释标签,不执行、不输出内容<%%
输出字符串'<%'
%>
一般结束标签-%>
删除紧随其后的换行符_%>
将结束标签后面的空格符删除
嵌套
通过include
关键字进行嵌套,通常使用(<%-
)包含前者,避免对输出的 HTML 代码做转义处理。
<%- include('header') %><%- include('header') %><%- include('header') %>
代码
Express入口文件
// index.jsconst express = require('express')let ejs = require('ejs')const app = express()const port = 3000//引用ejsapp.set('views', 'public'); //设置视图的对应目录app.set("view engine", "ejs"); //设置默认的模板引擎app.engine('ejs', ejs.__express); //定义模板引擎app.get('/', (req, res) => {// 向模版页注入变量const provider = { title: 'WAYLON', test: 123 }res.render('template.ejs', provider, (err, html) => {// 支持回调console.warn('waylon test', err, html);})})app.listen(port, () => {console.log(`Example app listening on port ${port}`)})// index.js const express = require('express') let ejs = require('ejs') const app = express() const port = 3000 //引用ejs app.set('views', 'public'); //设置视图的对应目录 app.set("view engine", "ejs"); //设置默认的模板引擎 app.engine('ejs', ejs.__express); //定义模板引擎 app.get('/', (req, res) => { // 向模版页注入变量 const provider = { title: 'WAYLON', test: 123 } res.render('template.ejs', provider, (err, html) => { // 支持回调 console.warn('waylon test', err, html); }) }) app.listen(port, () => { console.log(`Example app listening on port ${port}`) })// index.js const express = require('express') let ejs = require('ejs') const app = express() const port = 3000 //引用ejs app.set('views', 'public'); //设置视图的对应目录 app.set("view engine", "ejs"); //设置默认的模板引擎 app.engine('ejs', ejs.__express); //定义模板引擎 app.get('/', (req, res) => { // 向模版页注入变量 const provider = { title: 'WAYLON', test: 123 } res.render('template.ejs', provider, (err, html) => { // 支持回调 console.warn('waylon test', err, html); }) }) app.listen(port, () => { console.log(`Example app listening on port ${port}`) })
模版
// public/template.ejs<!DOCTYPE html><html><head><meta charset="utf-8"><%# 拿到title并输出 %><title><%- title %></title></head><body><%# 头部模版 %><%- include('header') %><%# js脚本 %><% for(let i=0;i<10;i++){ %><%# 显示输出 %><%= i %><% } %><%= test %><%# 底部模版 %><%- include('footer') %></body></html>// public/template.ejs <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <%# 拿到title并输出 %> <title><%- title %></title> </head> <body> <%# 头部模版 %> <%- include('header') %> <%# js脚本 %> <% for(let i=0;i<10;i++){ %> <%# 显示输出 %> <%= i %> <% } %> <%= test %> <%# 底部模版 %> <%- include('footer') %> </body> </html>// public/template.ejs <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <%# 拿到title并输出 %> <title><%- title %></title> </head> <body> <%# 头部模版 %> <%- include('header') %> <%# js脚本 %> <% for(let i=0;i<10;i++){ %> <%# 显示输出 %> <%= i %> <% } %> <%= test %> <%# 底部模版 %> <%- include('footer') %> </body> </html>
子模版
// public/header.ejs<% const pageName = 'waylonDemo' %><header><%= pageName %></header>// public/footer.ejs<% for (let i of ['到底啦','OoO']) { %><footer><div><%= i %></div></footer><% } %>// public/header.ejs <% const pageName = 'waylonDemo' %> <header> <%= pageName %> </header> // public/footer.ejs <% for (let i of ['到底啦','OoO']) { %> <footer> <div><%= i %></div> </footer> <% } %>// public/header.ejs <% const pageName = 'waylonDemo' %> <header> <%= pageName %> </header> // public/footer.ejs <% for (let i of ['到底啦','OoO']) { %> <footer> <div><%= i %></div> </footer> <% } %>
大功告成~
引用文献
- ejs (其实直接看官网文档就可以了,非常详细)
- express using-template-engines
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END