【问题标题】:What is next() in NodeJs?NodeJs 中的 next() 是什么?
【发布时间】:2019-04-07 20:04:08
【问题描述】:

我是来自 Java 背景的 NodeJs 新手,我正在尝试了解约定 next() 调用的用法。

我浏览了以下帖子 -
1.javascript node.js next()
2.https://www.naeemrana.com/node-js/express-js-middleware-what-is-next/
3.When to use next() and return next() in Node.js

我可以使它们成为 next() 类似于回调或可能是在当前函数执行后要执行的下一个函数的引用,
也明白了建议使用return next();而不是next();来避免函数被重新执行。

以下是链接中的示例代码 -

app.get('/users/:id', function(req, res) {
    var user_id = req.params.id;

    if(user_id) {
      // do something
    } else {
      next(); // here comes middleware.
    }
});

我在这里不明白的是正在执行的函数没有第三个参数,
但它确实调用了 next() 函数,这里的想法是什么?
是否仅在路由逻辑上使用此约定?
next() 是回调吗?它是对要执行的下一个函数的引用吗?还是别的什么?

【问题讨论】:

  • 您会惊讶于文章提供错误代码的普遍性。您提供的一篇文章忘记在函数参数中包含next。你的推测是正确的,next是回调函数,后续代码的引用。

标签: javascript node.js


【解决方案1】:

next() 不是 nodejs 的东西,而是 express 中间件函数。调用next() 基本上会转移到下一个中​​间件函数。 expressnode 的 Web 应用程序。

您可以阅读更多https://expressjs.com/en/guide/using-middleware.html

另外,请通读Express next function, what is it really for?,您应该了解哪些信息。

【讨论】:

    【解决方案2】:

    Node.Js 不知道next。这是express 框架使用的模式。

    因为 express 有一个中间件的概念,可以在每个进入它的请求中调用。

    如果当前中间件函数没有结束请求-响应循环,它必须调用 next() 将控制权传递给下一个中间件函数。否则,请求将被挂起。

    var app = express()
    
    app.use(function (req, res, next) {
      if(condition_to_return_from_here){
        res.end(req.params.id)
      }else{
      console.log('Time:', Date.now())
      next()
     }
    })
    

    更多关于 expressjs 和中间件 - https://expressjs.com/en/guide/using-middleware.html

    【讨论】:

      【解决方案3】:

      next() 实际上是中间件函数的回调参数,按照惯例称为“next”。当你使用下一个参数(作为中间件函数的参数)然后调用next()时,程序会移动到下一个中​​间件函数。

      但是 express 说“注意上面对 next() 的调用。调用此函数会调用应用程序中的下一个中间件函数。next() 函数不是 Node.js 的一部分或 Express API,但它是传递给中间件函数的第三个参数。”

      所以,我知道next() 不是 Nodejs 的东西。而且,我认为next() 不是 express 的东西。

      您可以阅读更多:https://expressjs.com/en/guide/writing-middleware.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-24
        • 2020-01-24
        • 1970-01-01
        • 2016-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多