TypeError:req.next不是函数

时间:2017-09-13 17:22:21

标签: node.js express middleware

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

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

enter image description here

2 个答案:

答案 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();
      } 
    })