在节点中获取此错误,我认为这是由于与我的一个中间件有关,但它指向的代码行是我在res.render()调用时的用户控制器。
我找不到任何人在网上写这个错误,但在查看代码一段时间后无法找出原因。有任何想法吗?
答案 0 :(得分:5)
如果您查看Express源代码,您会看到response.js
的第966行(来自堆栈)是这样的:
if (err) return req.next(err);
您看到的错误消息表明req
已定义但next
不是函数。如果你看得更远,你可以看到req
的来源:
var req = this.req;
其中this
是您调用render
的响应对象。
虽然next
通常只作为参数传递给回调,但也应该有一个名为next
的函数附加到请求中。这不是你通常与自己互动的东西,它是内部运作的一部分。
所以我看到两种可能性。要么某事已经改变res.req
指向错误的对象,要么某些东西已被吹走req.next
。我建议添加一些控制台日志记录以准确隔离出错的地方。例如,如果您将其置于每个中间件调用之间:
app.use(function(req, res, next) {
console.log(typeof req.next);
next();
});
它将允许您识别req.next
从应该是的功能转变为其他功能的点。
答案 1 :(得分:2)
对于我来说,我需要返回 next()
// Error
app.use((req, res, next) => {
if(!req.session.userId) {
next(); // <<<<< Error
}
})
// Solution
app.use((req, res, next) => {
if(!req.session.userId) {
return next();
}
})