TypeError:req.next不是一个函数

在节点中得到这个错误,我认为这是由于我的一件中间件,但它指向的代码行是我的用户控制器res.render()调用。

我找不到任何人在网上写这个错误,并且在查看代码一段时间后找不到原因。 有任何想法吗?

在这里输入图像说明

如果你看看Express源代码,你会看到response.js (来自堆栈)的第966行是这样的:

 if (err) return req.next(err); 

您所看到的错误消息表明req已定义,但next不是函数。 如果你看得更req ,你可以看到req来自哪里:

 var req = this.req; 

this是您调用render的响应对象。

虽然next通常只是作为parameter passing给callback函数,但也应该有一个名为next的函数附加到请求中。 这不是你通常与自己互动的东西,而是内在运作的一部分。

所以我看到两种可能性。 要么有什么改变res.req指向错误的对象,或东西吹走了req.next 。 我build议添加一些控制台日志logging,以确定哪里出错。 例如,如果你把它放在每个中间件调用之间:

 app.use(function(req, res, next) { console.log(typeof req.next); next(); }); 

它将允许您确定req.next从应该变成其他function的位置。