Question

Tout d'abord ... Bonne année!

Pourriez-vous s'il vous plaît me expliquer, comment cela fonctionne? Je naviguerez throught Connectez-vous de ( https://github.com/senchalabs/connect ) code source, mais je ne comprends pas.

Je voudrais écrire par moi-même.

app.get(
  '/',
  function(req, res, next) {
    // Set variable        
    req.var = 'Happy new year!';
    // Go to next function
    next();
  },
  function(req, res, next) {
    // Returns 'Happy new year!' 
    console.log(req.var); // <- HOW IS THIS POSSIBLE?
    // (...)
  }      
);

Merci à l'avance!

Était-ce utile?

La solution

Il semble que le premier argument de la fonction que vous fournissez est appelée par la fonction get() premier.

Quand il est appelé, 3 paramètres sont fournis à l'appel. A l'intérieur de l'appel, le paramètre req doit être un objet auquel vous pouvez affecter des propriétés. Vous avez attribué la propriété var, et lui a donné une valeur de 'Happy new year!'.

L'argument suivant de la fonction que vous passez est appelé par un appel au paramètre next() et 3 paramètres sont à nouveau fournis à l'appel. Le premier paramètre est apparemment le même objet qui a été donné au premier appel où vous avez attribué la propriété var.

Parce qu'il est (apparemment) le même objet, la propriété que vous avez attribué est toujours présent.

Voici un exemple simple: http://jsfiddle.net/dWfRv/1/ (ouvrir votre console)

// The main get() function. It has two function parameters.
function get(fn1, fn2) {
      // create an empty object that is passed as argument to both functions.
    var obj = {};
      // create a function that is passed to the first function, 
      //   which calls the second, passing it the "obj".
    var nxt = function() {
        fn2(obj); //When the first function calls this function, it fires the second.
    };
      // Call the first function, passing the "obj" and "nxt" as arguments.
    fn1(obj, nxt);
}

// Call get(), giving it two functions as parameters
get(
  function(req, next) {
      // the first function sets the req argument (which was the "obj" that was passed).
    req.msg = 'Happy new year';
      // the second function calls the next argument (which was the "nxt" function passed).
    next();
  }, 
  function(req) {
     // The second function was called by the first via "nxt",
     //   and was given the same object as the first function as the first parameter,
     //   so it still has the "msg" that you set on it.
    console.log(req.msg);
  }
);

Notez que ceci est un exemple très simplifié, avec moins de paramètres dans les fonctions. Non que j'ai changé var à msg depuis var est un mot réservé.

Autres conseils

Si vous voulez, essayez d'utiliser le module async. Il est chose beaucoup plus facile d'être en mesure d'exécuter en série, parallèles ou utiliser une piscine.

https://github.com/caolan/async

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top