javascript node.js next ()

148

Veo mucho uso nexten node.js.

¿Qué es, de dónde viene? ¿Qué hace? ¿Puedo usarlo del lado del cliente?

Lo sentimos, por ejemplo, se usa aquí: http://dailyjs.com/2010/12/06/node-tutorial-5/

busque la función loadUser.

Harry
fuente
No he visto esto en ninguna parte, y no se menciona en ninguna parte de la documentación. ¿Estás seguro de que no está definido en algún lugar de la base de código que estás viendo?
Samir Talwar
Eso es demasiado vago. ¿Puedes dar un ejemplo de contexto?
Raynos

Respuestas:

114

Esto parece ser una convención de nomenclatura variable en el código de flujo de control de Node.js, donde se da una referencia a la siguiente función a ejecutar a una devolución de llamada para que se inicie cuando se hace.

Vea, por ejemplo, los ejemplos de código aquí:

Veamos el ejemplo que publicaste:

function loadUser(req, res, next) {
  if (req.session.user_id) {
    User.findById(req.session.user_id, function(user) {
      if (user) {
        req.currentUser = user;
        return next();
      } else {
        res.redirect('/sessions/new');
      }
    });
  } else {
    res.redirect('/sessions/new');
  }
}

app.get('/documents.:format?', loadUser, function(req, res) {
  // ...
});

La loadUserfunción espera una función en su tercer argumento, que está vinculado al nombre next. Este es un parámetro de función normal. Contiene una referencia a la siguiente acción a realizar y se llama una vez que loadUserse realiza (a menos que no se pueda encontrar un usuario).

No hay nada especial sobre el nombre nexten este ejemplo; podríamos haberle dado cualquier nombre.

Wayne
fuente
Esto también se usa bastante en express.js pero no lo es .next(). Parece preguntar sobre nextcomo un método en un objeto.
Raynos
1
Mejor usarreturn next();
Ryan Walton
2
@RyanWalton Estoy de acuerdo
Wayne
Solía ​​en return callback()lugar dereturn next()
vijay
39

Es una convención de nomenclatura utilizada al pasar devoluciones de llamada en situaciones que requieren la ejecución en serie de acciones, por ejemplo, escanear directorio -> leer datos de archivo -> hacer algo con datos. Esto es preferible a anidar profundamente las devoluciones de llamada. Las primeras tres secciones del siguiente artículo en el blog HowToNode de Tim Caswell dan una buena descripción de esto:

http://howtonode.org/control-flow

Consulte también la sección Acciones secuenciales de la segunda parte de esa publicación:

http://howtonode.org/control-flow-part-ii

Pero P.
fuente
1
Muchas gracias por estos enlaces. Explica muchas cosas cuando empiezas a trabajar con nodejs
Hassam Abdelillah
El enlace no funciona ahora. Está dando un error interno del servidor
Deep Kakkar
1
Enlaces actualizados del archivo de Internet
Pero P.
gracias por los enlaces, comencé a usar Node hace unos meses pero me encuentro usando estas prácticas pero no las entiendo completamente
Charles Smith
8

Básicamente es como una devolución de llamada que express.js usa después de que se ejecuta y se hace una cierta parte del código, puede usarlo para asegurarse de que se haga parte del código y de lo que desea hacer, pero siempre tenga en cuenta que solo puede haz uno res.senden cada bloque REST ...

Entonces puedes hacer algo como esto como un simple next()ejemplo:

app.get("/", (req, res, next) => {
  console.log("req:", req, "res:", res);
  res.send(["data": "whatever"]);
  next();
},(req, res) =>
  console.log("it's all done!");
);

También es muy útil cuando desea tener un middleware en su aplicación ...

Para cargar la función de middleware, llame a app.use (), especificando la función de middleware. Por ejemplo, el siguiente código carga la función de middleware myLogger antes de la ruta a la ruta raíz (/).

var express = require('express');
var app = express();

var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
}

app.use(myLogger);

app.get('/', function (req, res) {
  res.send('Hello World!');
})

app.listen(3000);
Alireza
fuente