Javascript 具有多个函数的nodejs截取发送函数

Javascript 具有多个函数的nodejs截取发送函数,javascript,node.js,express,Javascript,Node.js,Express,我尝试创建一个简单的拦截器,在所有中间件中插入console.log。但是,当我在一个路由中定义了多个函数时,我遇到了一个问题 const express = require('express'); const moment = require('moment'); require('dotenv').config(); const app = express(); const config = { PORT: process.env.PORT, ENV: process.e

我尝试创建一个简单的拦截器,在所有中间件中插入console.log。但是,当我在一个路由中定义了多个函数时,我遇到了一个问题

const express = require('express');
const  moment = require('moment');
require('dotenv').config();
const app = express();

const config = {
    PORT: process.env.PORT,
    ENV: process.env.ENV,
    STATIC: process.env.STATIC,
    LABEL: (req)=>`${req.method} ${req.url} request timing`
}

//intercptor
const interceptor = function (...callback){
 return (req,res,next)=>{
     console.log(`info res.headersSent `,res.headersSent);
    const oldSend = res.send;
    res.send = function(data){
        console.log('SEND->',res.headersSent);
        oldSend.apply(res, arguments);

        console.timeEnd(config.LABEL(req));
        console.log(`INFO res.headersSent `,res.headersSent);
    }
    for(let i = 0 ; i<callback.length;i++){
        console.log(`res.headersSent [${i}]`,res.headersSent);
        console.log(">>>>>>>>>>>>>>>>>>>>>>>>>> execute")
        callback[i](req,res,next);
        if (res.headersSent) {
            console.log(`NOT EXEC!! res.headersSent [${i}]`,res.headersSent);
            return;
        }

    }

};
};


app.get('/example',interceptor(
 (req, res, next)=>{console.log('Hello from example 1!');next();},
         (req, res, next)=>{res.send('Hello from example 4!');},
))

app.post('/example',route(function (req, res, next){
console.log('this is example 1-B');
res.send('Hello from example 1-B!');
}))
如果我在中间件中只使用一个函数,那么所有函数都可以工作,这是我的错误

const InterceptorSend=function(req, res, next) {
    var oldSend = res.send;

    res.send = function(data){
        oldSend.apply(res, arguments);
        console.timeEnd(config.LABEL(req));
    }
    next();
}
    app.use(InterceptorSend);
app.get('/example',
     (req, res, next)=>{console.log('Step 1');next();},
             (req, res, next)=>{console.log('Step 2');res.send('Hello from example 2');},
             (req, res, next)=>{console.log('Step 3');res.send('Hello from example 2B');}
    )    

const InterceptorSend=function(req, res, next) {
    var oldSend = res.send;

    res.send = function(data){
        oldSend.apply(res, arguments);
        console.timeEnd(config.LABEL(req));
    }
    next();
}
    app.use(InterceptorSend);
app.get('/example',
     (req, res, next)=>{console.log('Step 1');next();},
             (req, res, next)=>{console.log('Step 2');res.send('Hello from example 2');},
             (req, res, next)=>{console.log('Step 3');res.send('Hello from example 2B');}
    )