world tutorial start node hello node.js express connect v8

tutorial - Cuándo usar next() y devolver next() en Node.js



server express node (3)

Algunas personas siempre escriben return next() para asegurarse de que la ejecución se detenga después de activar la devolución de llamada.

Si no lo haces, corres el riesgo de desencadenar la devolución de llamada una segunda vez más tarde, que generalmente tiene resultados devastadores. Su código está bien tal como está, pero lo reescribiría como sigue:

app.get(''/users/:id?'', function(req, res, next){ var id = req.params.id; if(!id) return next(); // do something });

Me ahorra un nivel de sangría, y cuando vuelvo a leer el código más tarde, estoy seguro de que no hay forma de que se llame dos veces.

Escenario : considere lo siguiente es la parte del código de una aplicación web de nodo.

app.get(''/users/:id?'', function(req, res, next){ var id = req.params.id; if (id) { // do something } else { next(); //or return next(); } });

Problema : estoy comprobando cuál ir con el next() o el return next() . El código de muestra anterior funciona exactamente igual para ambos y no mostró ninguna diferencia en la ejecución.

Pregunta : ¿Alguien puede aclarar esto, cuándo usar next() y cuándo usar return next() y alguna diferencia importante?


Como la respuesta de @Laurent Perrin:

Si no lo haces, corres el riesgo de desencadenar la devolución de llamada una segunda vez más tarde, lo que generalmente tiene resultados devastadores

Doy un ejemplo aquí si escribes middleware como este:

app.use((req, res, next) => { console.log(''This is a middleware'') next() console.log(''This is first-half middleware'') }) app.use((req, res, next) => { console.log(''This is second middleware'') next() }) app.use((req, res, next) => { console.log(''This is third middleware'') next() })

Descubrirá que la salida en la consola es:

This is a middleware This is second middleware This is third middleware This is first-half middleware

Es decir, ejecuta el código siguiente () después de que finalizó toda la función de middleware.

Sin embargo, si utiliza return next() , saltará la devolución de llamada inmediatamente y no se podrá acceder al siguiente código return next() en la devolución de llamada.


next() es parte de connect middleware . Las devoluciones de llamada para el flujo del enrutador no le importa si devuelve algo de sus funciones, por lo tanto, return next() y next(); return; next(); return; es básicamente lo mismo.

En caso de que quiera detener el flujo de funciones, puede usar el next(err) como el siguiente

app.get(''/user/:id?'', function(req, res, next) { console.log(''function one''); if ( !req.params.id ) next(''No ID''); // This will return error else next(); // This will continue to function 2 }, function(req, res) { console.log(''function two''); } );

Pretty next() se usa para extender el middleware de sus solicitudes.