介绍
EJS 是一套简单的模板语言,帮你利用普通的JavaScript 代码生成HTML 页面。 EJS 没有如何组织内容的教条;也没有再造一套迭代和控制流语法;有的只是普通的JavaScript 代码而已。
安装ejs
npm install ejs
配置
在 app.js里配置
app.set('view engine', 'ejs')
app.set('views', __dirname + '/views')
app.set(‘view engine’, ‘ejs’)
固定写法,这是模板引擎的意思(view engine)
app.set(‘views’, __dirname + ‘/views’)
设置模板文件的存放位置,如果不设置的话,默认会从views文件夹里找
第一步 配置app.js
配置应用程序以使用 EJS 并设置索引页面和关于页面的路由。
创建一个新app.js
文件并使用代码编辑器打开它并添加以下代码行:
const express = require('express')
const app = express()
const port = 3000
app.set('view engine', 'ejs')
app.set('views', __dirname + '/views')
app.get('/', (req, res) => {
res.render('pages/index')
})
app.get('/about', (req, res) => {
res.render('pages/about')
})
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
请注意代码如何使用 将视图发送给用户res.render()
。需要注意的是,res.render()
将在views
文件夹中查找视图。所以你只需要定义,pages/index
因为完整路径是views/pages/index
第二步 创建 EJS 部分
在app.js同层级目录下新建一个views
文件夹,在views
文件夹里面新建一个partials
文件夹,partials
文件夹里是重用的代码文件
在views\partials
目录下新建head.ejs
<meta charset="UTF-8">
<title>EJS Is Fun</title>
<style>
body { background: #ccc; }
</style>
在views\partials
目录下继续创建一个header.ejs
<nav>
<a href="/">EJS Is Fun</a>
<a href="/">Home</a>
<a href="/about">About</a>
</nav>
在views\partials
目录下继续创建一个footer.ejs
<p>我是footer.ejs中的p标签</p>
接下来就要在index.ejs
文件中引入views\partials
文件夹里的.ejs文件了
在views
文件夹中新建一个pages
文件夹
在views\pages
文件夹内新建一个index.ejs
文件
使用 <%- include(‘路径’) %> 引入要使用的.ejs文件
<!DOCTYPE html>
<html lang="en">
<head>
<%- include('../partials/head') %>
</head>
<body>
<header>
<%- include('../partials/header') %>
</header>
<main>
我是index.ejs中的main标签
</main>
<footer>
<%- include('../partials/footer') %>
</footer>
</body>
</html>
运行app.js node app.js
或nodemon app.js
接下来在views\pages
文件夹中创建一个 about.ejs
文件
<!DOCTYPE html>
<html lang="en">
<head>
<%- include('../partials/head'); %>
</head>
<body>
<header>
<%- include('../partials/header' %>
</header>
<main>
我是about页面
</main>
<footer>
<%- include('../partials/footer'); %>
</footer>
</body>
</html>
点击http://localhost:3000
中的About或者直接在地址栏输入http://localhost:3000/about
第三步 传递数据
在app.js
中给app.get('/')
路由中添加以下代码行:
const express = require('express')
const app = express()
const port = 3000
app.set('view engine', 'ejs')
app.set('views', __dirname + '/views')
app.get('/', (req, res) => {
const info = [
{ name: '张三', age: 18, gender: '男' },
{ name: '小红', age: 28, gender: '女' },
{ name: '翠翠', age: 20, gender: '女' },
]
const tagline = '我是标语 tagline'
res.render('pages/index', {info, tagline})
})
app.get('/about', (req, res) => {
res.render('pages/about')
})
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
在EJS中渲染变量
显示单个变量使用<%= tagline %>.
遍历多个可以使用.forEach
或 for(var i = 0; i < info.length; i++) {}
<!DOCTYPE html>
<html lang="en">
<head>
<%- include('../partials/head') %>
</head>
<body>
<header>
<%- include('../partials/header') %>
</header>
<main>
我是index.ejs中的main标签
<p> <%= tagline %> </p>
<ul>
<% info.forEach(data => { %>
<li>
<strong> <%= data.name %> </strong>
<em> <%= data.age %> </em>
<a href="#"> <%= data.gender %> </a>
</li>
<% }) %>
</ul>
</main>
<footer>
<%- include('../partials/footer') %>
</footer>
</body>
</html>
pages
文件夹中的about.ejs
将数据传递给partials
文件夹中的header.ejs
这是pages/about.ejs
在这里定义了variant
变量,就必须在 partials/header.ejs
中使用他,否则会报错
<!DOCTYPE html>
<html lang="en">
<head>
<%- include('../partials/head'); %>
</head>
<body class="container">
<header>
<%- include('../partials/header', { variant: '我是 variant' }) %>
</header>
<main>
我是about页面
</main>
<footer>
<%- include('../partials/footer'); %>
</footer>
</body>
</html>
这是partials\header.ejs
<nav>
<a href="/">EJS Is Fun</a>
<a href="/">Home</a>
<a href="/about">About</a>
<h2>
我是从 pages目录中的 about文件中传递过来的数据:
<%= typeof variant !== 'undefined' ? variant : '没有传递任何值,这是默认值' %>
</h2>
</nav>
这里使用了三目运算符typeof variant !== 'undefined' ? variant : '没有传递任何值,这是默认值'
在地址栏输入 http://localhost:3000/
在地址栏输入 http://localhost:3000/about