javascript node.js suivant ()

149

Je vois beaucoup d'utilité nextdans node.js.

Qu'est-ce que c'est, d'où vient-il? Qu'est ce que ça fait? Puis-je l'utiliser côté client?

Désolé, il est utilisé par exemple ici: http://dailyjs.com/2010/12/06/node-tutorial-5/

recherchez la fonction loadUser.

Harry
la source
Je n'ai vu cela nulle part, et il n'est référencé nulle part dans la documentation. Êtes-vous sûr qu'il n'est pas défini quelque part dans la base de code que vous regardez?
Samir Talwar
C'est beaucoup trop vague. Pouvez-vous donner un exemple de contexte.
Raynos

Réponses:

115

Cela semble être une convention de dénomination de variable dans le code de flux de contrôle Node.js, où une référence à la fonction suivante à exécuter est donnée à un rappel pour qu'il démarre une fois terminé.

Voir, par exemple, les exemples de code ici:

Regardons l'exemple que vous avez publié:

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 loadUserfonction attend une fonction dans son troisième argument, qui est lié au nom next. C'est un paramètre de fonction normal. Il contient une référence à la prochaine action à effectuer et est appelé une fois loadUserterminé (à moins qu'un utilisateur ne puisse être trouvé).

Il n'y a rien de spécial à propos du nom nextdans cet exemple; nous aurions pu le nommer n'importe quoi.

Wayne
la source
Ceci est également beaucoup utilisé dans express.js mais ce n'est pas le cas .next(). Il semble poser des questions nextcomme méthode sur un objet.
Raynos
1
Mieux vaut utiliserreturn next();
Ryan Walton
2
@RyanWalton Je suis d'accord
Wayne
J'ai utilisé à la return callback()place dereturn next()
vijay
39

Il s'agit d'une convention de dénomination utilisée lors du passage de rappels dans des situations qui nécessitent l'exécution d'actions en série, par exemple, analyser le répertoire -> lire les données du fichier -> faire quelque chose avec les données. Ceci est préférable à l'imbrication profonde des rappels. Les trois premières sections de l'article suivant sur le blog HowToNode de Tim Caswell en donnent un bon aperçu:

http://howtonode.org/control-flow

Consultez également la section Actions séquentielles de la deuxième partie de cette publication:

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

Pero P.
la source
1
Merci beaucoup pour ces liens. Cela explique beaucoup de choses lorsque vous commencez à travailler avec nodejs
Hassam Abdelillah
Le lien ne fonctionne pas actuellement. Il donne une erreur de serveur interne
Deep Kakkar
1
Liens mis à jour à partir des archives Internet
Pero P.
merci pour les liens, j'ai commencé à utiliser Node il y a quelques mois mais je me retrouve à utiliser ces pratiques mais je ne les comprends pas complètement
Charles Smith
8

C'est fondamentalement comme un rappel qu'express.js utilise après qu'une certaine partie du code est exécutée et terminée, vous pouvez l'utiliser pour vous assurer que cette partie du code est terminée et ce que vous voulez faire la prochaine chose, mais gardez toujours à l'esprit que vous ne pouvez faites-en un res.senddans chaque bloc REST ...

Vous pouvez donc faire quelque chose comme ceci à titre d' next()exemple simple :

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

C'est également très utile lorsque vous souhaitez avoir un middleware dans votre application ...

Pour charger la fonction middleware, appelez app.use (), en spécifiant la fonction middleware. Par exemple, le code suivant charge la fonction middleware myLogger avant la route vers le chemin racine (/).

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
la source