Перед тем, как понять next
, вам необходимо иметь представление о цикле «запрос-ответ» в узле, хотя и не очень подробно. Он начинается с того, что вы делаете 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 !!!!» ответ обратно. Для некоторых условий мы можем хотеть "Привет Планета !!!!" ответ. Давайте изменим приведенный выше код и посмотрим, что произойдет.
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 !!!!"
ответ.
Итак, next передает управление следующей функции в стеке промежуточного программного обеспечения.
Что если первая функция промежуточного программного обеспечения не отправляет ответ, но выполняет часть логики, а затем вы получаете ответ от второй функции промежуточного программного обеспечения.
Что-то вроде ниже: -
app.get('/hello', function (req, res, next) {
// Your piece of logic
next();
});
app.get('/hello', function (req, res, next) {
res.send("Hello !!!!");
});
В этом случае вам нужны обе функции промежуточного программного обеспечения. Таким образом, единственный способ получить доступ ко второй функции промежуточного программного обеспечения - это вызвать next ();
Что делать, если вы не позвоните следующим. Не ожидайте, что вторая функция промежуточного программного обеспечения будет вызвана автоматически. После вызова первой функции ваш запрос останется висеть. Вторая функция никогда не будет вызвана, и вы не получите ответ.
res.send
для завершения запроса. Если он не существует, вероятно, есть другой обработчик, который выдаст ошибку и завершит запрос.