出于某种原因,如果我是中间件的最后一块,我尝试调用
next()
函数,我得到的错误与
this
常见的SO问题。
所以我有一个最小的例子,我设置如下:
在我的路线中,我有:
router.get('/add',(req,res,next) => {
res.render('ideas/add');
next();
});
然后我有了最后一个中间件:
app.use(function finalMiddleware(req,res,next){
console.log("We are here!");
console.log(app._router.stack);
next();
});
控制台将以下内容记录为堆栈中的最后一个元素:
Layer {
handle: [Function: finalMiddleware],
name: 'finalMiddleware',
params: {},
path: '',
keys: [],
regexp: { /^\/?(?=\/|$)/i fast_star: false, fast_slash: true },
route: undefined } ]
但是,我仍然得到:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:471:11)
at ServerResponse.header (../node_modules/express/lib/response.js:767:10)
at ServerResponse.send (../node_modules/express/lib/response.js:170:12)
at done (../node_modules/express/lib/response.js:1004:10)
at Immediate.<anonymous> (../node_modules/express-handlebars/lib/utils.js:26:13)
我想知道这和车把有关吗?我只是不明白,如果我不使用以后的中间件编写头部,这可能是一个问题。我似乎不知道如何进一步调试它。当然,我可以把
下()
从我的最后一个中间件调用,但是我想了解是否有更深层的事情发生,因为我是新来表达的,并且想让我正确地理解一些东西。