Avant de comprendre next
, vous devez avoir une petite idée du cycle demande-réponse dans le nœud, mais pas beaucoup en détail. Cela commence lorsque vous faites une requête HTTP pour une ressource particulière et se termine lorsque vous renvoyez une réponse à l'utilisateur, c'est-à-dire lorsque vous rencontrez quelque chose comme res.send ('Hello World');
regardons un exemple très simple.
app.get('/hello', function (req, res, next) {
res.send('USER')
})
Ici, nous n'avons pas besoin de next (), car resp.send mettra fin au cycle et remettra le contrôle au middleware de route.
Voyons maintenant un autre exemple.
app.get('/hello', function (req, res, next) {
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
Ici, nous avons 2 fonctions middleware pour le même chemin. Mais vous obtiendrez toujours la réponse du premier. Parce qu'il est monté en premier dans la pile du middleware et que res.send mettra fin au cycle.
Mais que se passe-t-il si nous ne voulons pas toujours le "Hello World !!!!" réponse en retour. Pour certaines conditions, nous pouvons vouloir le "Hello Planet !!!!" réponse. Modifions le code ci-dessus et voyons ce qui se passe.
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 !!!!");
});
Que next
fait-on ici. Et oui, vous pourriez avoir des bus. Cela va sauter la première fonction middleware si la condition est vraie et appeler la prochaine fonction middleware et vous aurez la "Hello Planet !!!!"
réponse.
Donc, passez ensuite le contrôle à la fonction suivante dans la pile du middleware.
Que se passe-t-il si la première fonction middleware ne renvoie aucune réponse mais exécute un morceau de logique et que vous obtenez ensuite la réponse de la deuxième fonction middleware.
Quelque chose comme ci-dessous: -
app.get('/hello', function (req, res, next) {
// Your piece of logic
next();
});
app.get('/hello', function (req, res, next) {
res.send("Hello !!!!");
});
Dans ce cas, vous devez appeler les deux fonctions middleware. Ainsi, la seule façon d'atteindre la deuxième fonction middleware est d'appeler next ();
Et si vous n'appelez pas au suivant. Ne vous attendez pas à ce que la deuxième fonction middleware soit invoquée automatiquement. Après avoir invoqué la première fonction, votre demande restera suspendue. La deuxième fonction ne sera jamais invoquée et vous ne récupérerez pas la réponse.
res.send
pour terminer la demande. S'il n'existe pas, il existe probablement un autre gestionnaire qui émettra une erreur et terminera la demande.