TypeError:req.next不是函数

Ant*_*ony 4 middleware node.js express

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

我找不到任何人在网上撰写有关此错误的文章,并且在看了一段时间的代码后也找不到原因。有任何想法吗?

在此处输入图片说明

ski*_*tle 5

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

if (err) return req.next(err);
Run Code Online (Sandbox Code Playgroud)

您看到的错误消息表明req已定义但next不是函数。如果您进一步向上看,可以看到哪里req来的:

var req = this.req;
Run Code Online (Sandbox Code Playgroud)

this您调用的响应对象在哪里render

尽管next通常只是将其作为参数传递给回调,但应该next在请求中附加一个函数。这不是您通常与自己互动的内容,而是内部工作的一部分。

因此,我看到了两种可能性。某些东西已经更改res.req为指向错误的对象,或者有些东西被吹走了req.next。我建议添加一些控制台日志记录以准确找出问题所在。例如,如果将其放在每个中间件调用之间:

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

    next();
});
Run Code Online (Sandbox Code Playgroud)

它可以让您确定req.next从功能应切换为其他功能的点。

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

Sim*_*yJS 5

就我而言,我需要返回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();
      } 
    })
Run Code Online (Sandbox Code Playgroud)