Express - 使用中间件
中间件是可以访问请求对象,响应对象以及next()函数,可以完成如下任务:
- 执行任何代码
- 更改请求和响应对象
- 结束请求处理
- 调用下一个中间件
1. 全局中间件
//创建应用
const express = require('express');
const app = express();
//创建日志中间件
const logger = (req, resp, next) => {
console.log(`${req.method} ${req.path}`);
next();
};
//使用中间件
app.use(logger);
// 设置路由
app.get('/', (req, resp) => {
resp.send('hello, express');
});
//开启监听
app.listen(8080, () => {
console.log('listen on 8080');
});
2. 路由中间件
// 创建应用
...
// 创建中间件
const logger = (req, resp, next) => {
console.log(`${req.method} ${req.path}`);
next();
};
// 在路由中挂载中间件
app.get('/', logger, (req, resp) => {
resp.send('hello, express');
});
// 开启监听
...
3. 创建可配置的中间件
//创建应用
...
//创建可配置中间件
const logger = (options) => (req, resp, next) => {
const logs = [];
if(options.method){
logs.push(req.method);
}
if(options.path){
logs.push(req.path);
}
console.log(logs.join(' '));
next();
};
// 使用中间件
app.use(logger({'method':true}));
// 设置路由
...
// 开启监听
...
4. 静态资源中间件
// 创建应用
...
// 挂载静态资源中间件
app.use(express.static('./public'));
// 设置路由
...
// 开启监听
...
5. 使用第三方中间件
// 创建应用
...
// 导入body-parser中间件
const bodyParser = require('body-parser');
// 导入cookie-parser中间件
const cookieParser = require('cookie-parser');
// 使用body-parser 与cookie-parser中间件
app.use(bodyParser());
app.use(cookieParser());
// 设置路由
...
// 开启监听
...