Anlamadan önce next
, ayrıntılı olarak olmasa da, düğümde İstek-Yanıt döngüsü hakkında küçük bir fikriniz olması gerekir. Belirli bir kaynak için HTTP isteğinde bulunmanızla başlar ve kullanıcıya bir yanıt gönderdiğinizde, yani res.send ('Merhaba Dünya') gibi bir şeyle karşılaştığınızda sona erer.
çok basit bir örneğe bakalım.
app.get('/hello', function (req, res, next) {
res.send('USER')
})
Burada next () işlevine ihtiyacımız yok, çünkü resp.send çevrimi sona erdirecek ve kontrolü yol orta yazılımına geri verecektir.
Şimdi başka bir örneğe bakalım.
app.get('/hello', function (req, res, next) {
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
Burada aynı yol için 2 ara katman fonksiyonuna sahibiz. Ama her zaman ilkinden yanıt alacaksınız. Çünkü bu ilk olarak ara katman yığınına monte edilir ve res.send döngüsü sona erdirir.
Ama ya hep "Merhaba Dünya !!!!" yanıt. Bazı koşullar için "Merhaba Gezegen !!!!" tepki. Yukarıdaki kodu değiştirelim ve ne olacağını görelim.
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
Burada ne işi var. Ve evet küfürleriniz olabilir. Koşul doğruysa ilk ara katman işlevini atlayacak ve bir sonraki ara katman işlevini çağıracak ve "Hello Planet !!!!"
yanıtı alacaksınız .
Böylece, daha sonra kontrolü ara katman yığınındaki bir sonraki işleve geçirin.
İlk ara katman yazılımı işlevi herhangi bir yanıt göndermez ancak bir parça mantık yürütürse ve sonra ikinci ara katman işlevinden geri yanıt alırsanız ne olur.
Aşağıdaki gibi bir şey: -
app.get('/hello', function (req, res, next) {
// Your piece of logic
next();
});
app.get('/hello', function (req, res, next) {
res.send("Hello !!!!");
});
Bu durumda, her iki ara katman işlevinin de çağrılması gerekir. Bu nedenle, ikinci ara katman işlevine erişmenin tek yolu next ();
Bir sonrakini aramazsanız ne olur. İkinci ara katman işlevinin otomatik olarak çağrılmasını beklemeyin. İlk işlevi çağırdıktan sonra isteğiniz asılı kalır. İkinci işlev asla çağrılmaz ve yanıtı geri alamazsınız.
res.send
isteği tamamlamak için kullanılır . Yoksa, büyük olasılıkla bir hata verecek ve isteği tamamlayacak başka bir işleyici vardır.