Express(04):中间件
示例1(应用级)
/*
中间件:处理过程的一个环节(本质上就是一个函数,可以随时访问req,res)
中间件类型:
1. 应用级中间件
2. 路由级中间件
3. 错误处理
4. 内置
5. 第三方
*/
const express = require('express');
const app = express();
let total = 0;
//全局的
app.use('',(req,res,next)=>{
console.log('有人访问');
//next方法的作用就是把请求传递到下一个中间件(函数)
next();
});
app.use('/user',(req,res,next)=>{
console.log(Date.now());
//next方法的作用就是把请求传递到下一个中间件(函数)
next();
});
app.use('/user',(req,res,next)=>{
console.log("访问了/user");
next();
});
app.use('/user',(req,res)=>{
total++;
console.log(total);
res.send("user");
});
app.listen(3000,()=>{
console.log('服务启动……');
});
示例2(路由级)
/*
中间件的挂载方式和执行流程
use
路由方式:get,post,put,delete
*/
const express = require('express');
const app = express();
// app.get('/abc',(req,res,next)=>{
// console.log(1);
// // next();
// //跳转到下一个路由
// next('route');
// },(req,res) =>{
// console.log(2);
// res.send('abc');
// });
//
// app.get('/abc',(req,res)=>{
// console.log(3);
// res.send('hello');
// });
//==============================================
// //使用回调函数数组处理路由
// var cb0 = function (req, res, next) {
// console.log('CB0');
// next();
// }
//
// var cb1 = function (req, res, next) {
// console.log('CB1');
// next();
// }
//
// var cb2 = function (req, res) {
// res.send('Hello from C!');
// }
// app.get('/example', [cb0, cb1, cb2]);
//============================================
//混合使用
var cb0 = function (req, res, next) {
console.log('CB0');
next();
}
var cb1 = function (req, res, next) {
console.log('CB1');
next();
}
app.get('/example/d', [cb0, cb1], function (req, res, next) {
console.log('the response will be sent by the next function ...');
next();
}, function (req, res) {
res.send('Hello from D!');
});
app.listen(3000,()=>{
console.log('服务已启动……');
});