Express简介
Express是一款基于Node.js平台的、极简的web开发框架,其核心是中间件。
自动化构建一个Express应用程序
使用Express 应用生成器可以快速创建一个应用的骨架,前提是首先安装express-generator:
npm install express-generator -g
安装依赖包:
cd myapp
npm install
启动应用:
set DEBUG=myapp & npm start
手动构建极简的Express应用程序
创建一个名为app.js的文件,添加如下代码:
var express = require('express');
var app = express();
//添加应用级路由
app.get('/', function (req, res) {
res.send('Hello World!');
});
//启用监听
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
通过
npm i express --save
安装依赖,然后node app.js
启动此应用
Express核心
路由
路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄组成,如
app.get('/home', callback)
、app.post('/home', callback2)
路由的回调函数
express可以为路由提供多个回调函数,回调函数包含
req
、res
、next
对象;
req
为请求对象,可以取得请求的相关参数,如req.query
就可以取得请求参数对象;
res
为响应对象,可以取得设置响应内容,如res.send('响应内容')
next
表示本次路由执行完毕,执行下一个路由,可以用于跳过某些非必要执行的内容
假设针对某个路由,不仅有get
请求、而且有post
请求,那么使用app.router()
创建链式路由更加方便,例如:
app.route('/book')
.get(function(req, res) {
res.send('Get a random book');
})
.post(function(req, res) {
res.send('Add a book');
});
上述代码中,路由
/book
不仅有get请求,而且有post请求;
Router路由
如果仅仅使用应用级路由会导致app.js中路由代码过多,因此通过
express.Router()
需要引入路由级中间件。这样就可以按模块把不同的路由分离。例如:
在 app 目录下创建名为 birds.js 的文件,内容如下:
var express = require('express');
var router = express.Router();
// 该路由使用的中间件
router.use(function timeLog(req, res, next) {
console.log('Time: ', Date.now());
next();
});
// 定义网站主页的路由
router.get('/', function(req, res) {
res.send('Birds home page');
});
// 定义 about 页面的路由
router.get('/about', function(req, res) {
res.send('About birds');
});
module.exports = router;
然后在应用中加载路由模块:
var birds = require('./birds');
app.use('/birds', birds);
中间件
中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。
Express 应用可使用如下几种中间件:
- 应用级中间件
- 路由级中间件
- 错误处理中间件
- 内置中间件
- 第三方中间件
上一节中介绍路由的时候,使用应用级中间件和路由级中间件进行举例,那么错误处理中间件 又是什么呢?直接看代码:
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});
内置中间件:
从 4.x 版本开始,只有
express.static
了,基于 serve-static,负责在 Express 应用中提托管静态资源。
第三方中间件
通过使用第三方中间件从而为 Express 应用增加更多功能,安装所需功能的 node 模块,并在应用中加载,可以在应用级加载,也可以在路由级加载。例如:
cookie-parser
npm install cookie-parser -S
var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
// 加载用于解析 cookie 的中间件
app.use(cookieParser());
参考文献:
[1] express官网