Frage

Zunächst einmal ... ein frohes neues Jahr!

Könnten Sie mir bitte erklären, wie funktioniert das? Ich stöberte durch Verbinden's (https://github.com/senchalabs/connect) Quellcode, aber ich verstehe ihn nicht.

Ich würde es gerne selbst schreiben.

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?
    // (...)
  }      
);

Danke im Voraus!

War es hilfreich?

Lösung

Es sieht so aus, als ob das erste Funktionsargument, das Sie bereitstellen get() zuerst funktionieren.

Wenn es aufgerufen wird, werden dem Anruf 3 Parameter zur Verfügung gestellt. Innerhalb des Anrufs, die req Der Parameter muss ein Objekt sein, dem Sie Eigenschaften zuweisen können. Sie haben die zugewiesen var Eigentum und ihm einen Wert von gegeben 'Happy new year!'.

Das nächste Funktionsargument, das Sie übergeben, wird über einen Aufruf an die aufgerufen next() Parameter und 3 Parameter werden dem Anruf erneut bereitgestellt. Der erste Parameter ist anscheinend das gleiche Objekt, das dem ersten Anruf gegeben wurde, bei dem Sie das zugewiesen haben var Eigentum.

Da es (anscheinend) dasselbe Objekt ist, ist die von Ihnen zugewiesene Eigenschaft noch vorhanden.

Hier ist ein einfaches Beispiel: http://jsfiddle.net/dwfrv/1/ (Öffnen Sie Ihre Konsole)

// 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);
  }
);

Beachten Sie, dass dies ein sehr vereinfachtes Beispiel mit weniger Parametern in den Funktionen ist. Nicht auch, dass ich mich verändert habe var zu msg seit var ist ein reserviertes Wort.

Andere Tipps

Wenn Sie möchten, verwenden Sie das asynchrische Modul. Es erleichtert viel einfacher, in Serie, Parallelen oder einem Pool laufen zu können.

https://github.com/caolan/async

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top