express中间件
中间件
在node执行的过程中,在请求和应答的中间会有很多中间处理不同东西的组件,这样的组件叫做中间件。中间件的执行过程是:请求发送-第一个中间件接收-第一个中间件应答-第一个中间件请求-第二个中间件接收-第二个中间件应答-第二个中间件请求-最终应答。
具体使用:
app.use((req, res, next) => {
req.requestTime = new Date().toISOString();
next();
});
- 必须执行next函数,不然会在中间件中出不来
- 中间件是线性执行的,当任务在它前面就已经结束,则不会执行中间件中的代码
第三方中间件
-
npm i morgan
-
使用
const morgan = require('morgan'); app.use(morgan('dev'));
返回类似这样的东西
GET /api/v1/users 404 4.909 ms - 151
param 中间件
param中间件只在包含某些参数的时候运行,在有id的时候运行
router.param('id', (req, res, next, val) => {
console.log(`Tour id id : ${val}`);
next();
});
链式中间件
在某个请求的前面写上检查函数,那么在该请求的时候就会根据这个中间件检查
exports.checkBody = (req, res, next) => {
if (!req.body.name || !req.body.price) {
return res.status(400).json({
status: 'fail',
message: 'Missing name or price',
});
}
next();
};
router
.route('/')
.get(tourController.getAllTours)
.post(tourController.checkBody, tourController.createTour);