NodeJs中的next()是什么?

时间:2018-11-04 04:50:36

标签: javascript node.js

我是来自Java背景的NodeJ的新手,我试图了解惯例 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()是回调吗?它是对下一个要执行的功能的引用吗?还是其他?

3 个答案:

答案 0 :(得分:2)

next()不是nodejs,而是express中间件功能。调用next()基本上会移至下一个中间件功能。 expressnode的Web应用程序。

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

另外,请通读Express next function, what is it really for?,您应该了解这件事。

答案 1 :(得分:1)

Node.Js不知道nextexpress框架使用了这种模式。

快速表达具有中间件的概念,可以在每个请求中调用中间件。

  

如果当前中间件函数没有结束请求-响应周期,则它必须调用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

的更多信息

答案 2 :(得分:0)

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

但是 express 表示“请注意上述对next()的调用。调用此函数将调用应用程序中的下一个中间件函数。next()函数不是Node.js的一部分。或Express API,但这是传递给中间件功能的第三个参数。”

因此,我知道next()不是Node.js的东西。但是,我认为next()不是表达的事情。

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