我是来自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()是回调吗?它是对下一个要执行的功能的引用吗?还是其他?
答案 0 :(得分:2)
next()
不是nodejs,而是express
中间件功能。调用next()
基本上会移至下一个中间件功能。 express
是node
的Web应用程序。
您可以阅读更多https://expressjs.com/en/guide/using-middleware.html
另外,请通读Express next function, what is it really for?,您应该了解这件事。
答案 1 :(得分:1)
Node.Js不知道next
。 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
答案 2 :(得分:0)
next()
实际上是中间件函数的回调参数,按照惯例称为“ next”。当您使用下一个参数(作为中间件函数的参数)然后调用next()
时,程序将移至下一个中间件函数。
但是 express 表示“请注意上述对next()的调用。调用此函数将调用应用程序中的下一个中间件函数。next()函数不是Node.js的一部分。或Express API,但这是传递给中间件功能的第三个参数。”
因此,我知道next()
不是Node.js的东西。但是,我认为next()
不是表达的事情。
您可以阅读更多内容:https://expressjs.com/en/guide/writing-middleware.html