Antes de comprender next
, debe tener una pequeña idea del ciclo de Solicitud-Respuesta en el nodo, aunque no mucho en detalle. Comienza con una solicitud HTTP para un recurso en particular y finaliza cuando envía una respuesta al usuario, es decir, cuando encuentra algo como res.send ('Hola Mundo');
Echemos un vistazo a un ejemplo muy simple.
app.get('/hello', function (req, res, next) {
res.send('USER')
})
Aquí no necesitamos next (), porque resp.send finalizará el ciclo y devolverá el control al middleware de ruta.
Ahora echemos un vistazo a otro ejemplo.
app.get('/hello', function (req, res, next) {
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
Aquí tenemos 2 funciones de middleware para la misma ruta. Pero siempre obtendrás la respuesta de la primera. Porque eso se monta primero en la pila de middleware y res.send terminará el ciclo.
Pero, ¿y si siempre no queremos el "Hola Mundo!" respuesta de vuelta. Para algunas condiciones podemos querer el "Hola Planeta !!!!" respuesta. Modifiquemos el código anterior y veamos qué sucede.
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 !!!!");
});
¿Qué está next
haciendo aquí? Y sí, podrías tener quejas. Saltará la primera función de middleware si la condición es verdadera e invocará la siguiente función de middleware y obtendrá la "Hello Planet !!!!"
respuesta.
Entonces, luego pase el control a la siguiente función en la pila de middleware.
¿Qué sucede si la primera función de middleware no envía ninguna respuesta pero ejecuta una lógica y luego obtiene la respuesta de la segunda función de middleware?
Algo como a continuación: -
app.get('/hello', function (req, res, next) {
// Your piece of logic
next();
});
app.get('/hello', function (req, res, next) {
res.send("Hello !!!!");
});
En este caso, necesita invocar ambas funciones de middleware. Entonces, la única forma de llegar a la segunda función de middleware es llamando a next ();
¿Qué pasa si no haces una llamada al siguiente? No espere que la segunda función de middleware se invoque automáticamente. Después de invocar la primera función, su solicitud quedará pendiente. La segunda función nunca se invocará y no obtendrá la respuesta.
res.send
para completar la solicitud. Si no existe, es probable que haya otro controlador que emita un error y complete la solicitud en ese momento.