Перш ніж зрозуміти next
, вам потрібно мати трохи уявлення про цикл запит-відповідь у вузлі, хоча і не дуже детально. Він починається з того, що ви робите запит HTTP на певний ресурс, і закінчується, коли ви надсилаєте відповідь користувачеві, тобто коли ви стикаєтесь з чимось на зразок res.send ("Hello World");
давайте подивимося на дуже простий приклад.
app.get('/hello', function (req, res, next) {
res.send('USER')
})
Тут нам не потрібен наступний (), оскільки 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 закінчить цикл.
Але що робити, якщо ми завжди не хочемо "Привіт Світу !!!!" відповідь назад. Для деяких умов ми можемо захотіти "Привіт планети !!!!" відповідь. Давайте модифікуємо вищевказаний код і подивимося, що відбувається.
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 ();
Що робити, якщо ви не телефонуєте до наступного. Не сподівайтеся, що друга функція середнього програмного забезпечення буде автоматично викликана. Після виклику першої функції ваш запит буде залишений. Друга функція ніколи не буде викликана, і ви не отримаєте відповідь.
res.send
для завершення запиту. Якщо його не існує, ймовірно, інший обробник видасть помилку і завершить запит.