在理解之前next
,你需要对 node 中的 Request-Response 循环有一点了解,虽然不是很详细。它从您对特定资源发出 HTTP 请求开始,并在您向用户发送回响应时结束,即当您遇到类似 res.send('Hello World'); 之类的东西时。
让我们看一个非常简单的例子。
app.get('/hello', function (req, res, next) {
res.send('USER')
})
这里我们不需要 next(),因为 resp.send 会结束循环并将控制权交还给路由中间件。
现在让我们看另一个例子。
app.get('/hello', function (req, res, next) {
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
在这里,我们有 2 个用于同一路径的中间件函数。但你总是会得到第一个的回应。因为它首先安装在中间件堆栈中, res.send 将结束循环。
但是,如果我们总是不想要“Hello World !!!”怎么办?回复。在某些情况下,我们可能需要“Hello Planet !!!” 回复。让我们修改上面的代码,看看会发生什么。
app.get('/hello', function (req, res, next) {
if(some condition){
next();
return;
}
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
在这里做什么next
。是的,你可能有猜测。如果条件为真,它将跳过第一个中间件函数并调用下一个中间件函数,您将得到"Hello Planet !!!!"
响应。
因此,接下来将控制权传递给中间件堆栈中的下一个函数。
如果第一个中间件函数没有发回任何响应但确实执行了一段逻辑,然后你从第二个中间件函数得到响应怎么办?
如下所示:-
app.get('/hello', function (req, res, next) {
// Your piece of logic
next();
});
app.get('/hello', function (req, res, next) {
res.send("Hello !!!!");
});
在这种情况下,您需要调用两个中间件函数。因此,到达第二个中间件函数的唯一方法是调用 next();
如果您不拨打下一个电话怎么办。不要期望第二个中间件函数会自动调用。调用第一个函数后,您的请求将被挂起。第二个函数永远不会被调用,你也不会得到响应。