应用层中间件
app.use()
放到路由之前
整个程序使用中间件
app.use((req, res, next) => {
console.log("应用层中间件");
next();
})
连写:
app.use((req, res, next) => {
console.log("应用层中间件");
next();
}, (req, res, next) => {
console.log("应用层中间件");
next();
});
应用层中间也可以配成某个路由的中间件
app.use('/login',(req,res,next)=>{
console.log("进入login路由之前的操作");
next();
});
应用层中间写成链式操作
app.use('/login', (req, res, next) => {
console.log(1);
next();
}, (req, res, next) => {
console.log(2);
next();
});
关联路由中间件
app.use('/', route);
错误中间件 多了一个参数 这个参数也是区分的标识 error
app.use((error, req, res, next) => {
console.log("错误中间件");
//res.redirect('/');
console.log(error.stack); //输出错误信息
res.status(500).send("出错了");
});
- express 框架里面提供的中间件
- 应用层中间件 应用层中间件先执行
- 路由器级中间件
- 错误处理中间件
- 内置中间件
- 第三方中间件
路由中间件
路由中间件中 跳转下一个路由使用 next('route');
router.use((req, res, next) => {
console.log("所有路由中间件");
next();
});
所有的路由守卫
router.all('*', (req, res, next) => {
console.log("路由的all方法");
next();
});
router.get("/", (req, res) => {
res.send("首页");
});
写登录路由的中间件 放在当前路由之前
router.use("/login", (req, res, next) => {
console.log("马上进入login路由");
// 例如这里出错了
let err = new Error("路由里面出错了");
next(err); //这样可以出发错误中间件的执行
});
router.get("/login", (req, res, next) => {
console.log('login1');
检测
if (false) {
next();
} else {
跳过后边的路由回调函数 到下一个路由
next('route');
}
}, (req, res, next) => {
console.log('login2');
next();
});
router.get("/login", (req, res) => {
console.log('login3');
res.send("登录info");
});