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('服务已启动……');
});
posted @ 2020-10-20 09:25  mrtransition  阅读(66)  评论(0编辑  收藏  举报