2017-09-13 80 views
1

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

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

enter image description here

+0

'next'是独立函数,它不是'req'对象的一部分。你在代码中调用'req.next'吗? – alexmac

+0

不,我不.. – Antoine

+0

那么你能提供堆栈跟踪吗? – alexmac

回答

3

如果你看看在快速的源代码,你会看到该行的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开关。

+0

真棒,感谢您的真正彻底的答案,我将有机会很快看到这一点,并回到你身边,但我认为这将有助于我进行调试。 – Antoine

+0

我发现了这个错误,我在同一个中间件中调用next()两次。 – Antoine