我正在使用nodejs开发apis。我已经看到函数中传递了一个参数bookRouter.use('/:bookId', function(req,res,next){
Book.findById(req.params.bookId, function(err,book){
if(err)
res.status(500).send(err);
else if(book)
{
req.book = book;
next();
}
else
{
res.status(404).send('no book found');
}
});
});
,如下所示:
List<String> list = new ArrayList<>();
Collections.addAll(list, "a","b","c","b","c","a","c","a","b");
我从未在我的开发中使用过这个功能,我想知道我是否真的需要使用它?
答案 0 :(得分:2)
来自文档:
您可以提供多个回调函数,其行为类似于中间件来处理请求。唯一的例外是这些回调可能会调用下一个(&#39; route&#39;)来绕过剩余的路由回调。您可以使用此机制在路径上施加前置条件,然后在没有理由继续当前路线的情况下将控制权传递给后续路线。
单个回调函数可以处理路由。例如:
app.get('/example/a', function (req, res) {
res.send('Hello from A!');
});
多个回调函数可以处理路径(确保指定下一个对象)。例如:
app.get('/example/b', function (req, res, next) {
console.log('the response will be sent by the next function ...');
next();
}, function (req, res) {
res.send('Hello from B!');
});
答案 1 :(得分:0)
我在node.js中的表现并不强,但目的是在找到具有给定ID的书籍时调用函数。要调用的函数作为next
传入。可能涉及其他中间件组件,因此调用next()
可确保在此部分成功时,下一个中间件可以处理请求。
答案 2 :(得分:0)
next
函数将调用堆栈中的下一个中间件函数。有关详细信息,请参阅https://expressjs.com/en/guide/using-middleware.html。
希望这有帮助。
答案 3 :(得分:0)
您不必使用next()
,因为您的操作是处理请求的最后一个操作。这是documentation片段:
中间件函数是可以访问请求对象(req),响应对象(res)以及应用程序请求 - 响应周期中的下一个中间件函数的函数。下一个中间件函数通常由名为next的变量表示。
中间件功能可以执行以下任务:
- 执行任何代码。
- 更改请求和响应对象。
- 结束请求 - 响应周期。
- 调用堆栈中的下一个中间件函数。
醇>如果当前的中间件函数没有结束请求 - 响应周期,则必须调用next()将控制权传递给下一个中间件函数。否则,请求将被挂起。
答案 4 :(得分:0)
Node是基于事件的语言,带有回调。如果您的事件成功触发并且您想要执行某个函数,那么它将作为参数传递给它。但是如果你没有传递函数或者你没有使用它,它不会产生问题。