创建项目
环境:node14.17 、express4.16
快速开始
express app
cd app
npm init -y
npm run start
复制代码
至此一个包含部署服务的应用程序Web项目就创建好了。
文件目录结构
app
│ app.js // 应用程序的创建/配置
│ package.json
│
├─bin
│ www //部署http server
│
├─public
│ ├─images
│ ├─javascripts
│ └─stylesheets
│ style.css
│
├─routes
│ index.js
│ users.js
│
└─views
error.jade
index.jade
layout.jade
复制代码
路由
除了默认的路由,还需要添加额外的路由。
定义路由
在routes
文件夹中新增路由index.js
。
/* routes>index.js */
var express = require('express');
var router = express.Router();
router.get('/index', function (req, res, next) {
// response something
});
module.exports = router;
复制代码
路由视图
路由页面由响应的视图(HTML)来呈现,响应方式也有很多种,这里修改了原有的views
文件结构,分别管理不同的视图文件:
views
├─html
│ index.html
│ users.html
├─ejs
│ index.ejs
│ users.ejs
├─jade
│ index.jade
│ users.jade
│ layout.jade
复制代码
配合匹配不同类型的视图文件,路由模块也做了相应修改:
routes
├─file
│ index.js
│ users.js
├─engine
│ index.js
│ users.js
复制代码
HTML文件
如果你的页面是简单静态的,可以选择直接响应HTML文件来呈现路由页面。
需要呈现的HTML
<!-- views>html>index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HTML</title>
</head>
<body>
<h1>一个普通的HTML页面</h1>
</body>
</html>
复制代码
路由响应
/* routes>file>index.js */
var express = require('express');
var router = express.Router();
var fs = require('fs');
router.get('/', function (req, res, next) {
const file = fs.readFileSync('views/html/index.html', 'utf-8') // fs的绝对路径 和 文件对应的编码方式 很重要
res.send(file)
});
module.exports = router;
复制代码
无需任何模板引擎(engine)的配置,就可以直接呈现HTML页面。
模板引擎
模板引擎可以让我们通过变量传递动态控制视图内容,不同的模板引擎还提供不同的简洁语法,各有千秋。
express-generator
使用了jade
作为默认的模板引擎。
安装模板引擎(ejs)
npm i ejs
复制代码
挂载模板引擎
/* app.js */
app.set('views', path.join(__dirname, `views/ejs`)); // 批量导入视图文件
app.set('view engine', 'ejs'); // 挂载模板引擎
复制代码
模板视图文件
<!-- views>ejs>index.ejs -->
<h2><%= template %></h2>
<p> Welcome to <%= index %></p>
复制代码
路由响应
在路由响应中使用res.render(view,data)
,这个API传入视图文件名(view)称和传递的数据(data),最终返回一个HTML
。
/* routes>file>index.js */
var express = require('express');
var router = express.Router();
router.get('/index', function (req, res, next) {
res.render('index', {
template: 'EJS ',
message: 'index',
});
});
module.exports = router;
复制代码
自定义模板引擎(nuj)
自定义一个模板引擎,可根据喜好设计模板语法,相应渲染时就需要解析为HTML;当然也可以什么都不做,直接返回文件内容。
/* app.js */
app.set('views', path.join(__dirname, `views/html`));
app.set('view engine', 'nuj');
// setup nuj engine
app.engine('nuj', function (filePath, options, callback) {
// 处理文件内容...
fs.readFile(filePath, function (error, content) {
if (error) return callback(new Error(error))
var renderContent = content.toString().replace('%title%','<title>'+options.title+'</title>')
return callback(null, renderContent)
})
})
复制代码
路由挂载
需要注意的是,如果在
routes>*>index.js
中已经定义了路径/index
,挂载时就不要重复设定路径了。
file 响应路由
/* app.js */
app.use('/', require('./routes/file/index'));
// app.use('/about', require('./routes/file/index')); // 重复设定路径
复制代码
render 模板引擎路由
/* app.js */
app.use('/', require('./routes/engine/index'));
复制代码
路由匹配
……
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END