所谓中间件,就是一个函数。
Express server 正常的执行流程: HTTP 请求 -> 执行 route handler
但是使用中间件可以在这个流程的中间执行额外的代码:
HTTP 请求 -> do something(中间件) -> 执行 route handler
可以使用中间件完成用户认证等操作。
例如当网站在进行维护时,可以使用中间件拦截一切HTTP请求,告知网站正在维护,无法访问:
require("./db/mongoose");
// 注册中间件函数 req.method: GET, POST, PATCH etc...
app.use((req, res, next) => {
res.status(503).send("The site is under maintenance, please try back soon.");
});
// 其他 app.use() 放在注册中间件函数的代码之下。
app.use(express.json());
调用 next()
结束中间件函数执行,流程转到 route handler,这里故意不调用 next()
,实现HTTP 请求拦截。