在理解下面的内容之前,您需要对节点中的请求-响应周期有一些了解,但不需要太详细。
它开始于你对特定资源的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 !!!!");
});
这里我们有两个中间件函数对应相同的路径。但你总能从第一个人那里得到回应。因为它首先挂载在中间件堆栈中,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 !!!!");
});
下一个在这里做什么。是的,你可能会有猜测。如果条件为真,它会跳过第一个中间件函数然后调用下一个中间件函数你会得到"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();
如果你不打电话给下一个。不要期望自动调用第二个中间件函数。调用第一个函数后,您的请求将被挂起。第二个函数永远不会被调用,您也不会得到响应。