Diese Frage erweitert, dass die What is Node.js' Connect, Express and "middleware"?Middleware-Entwurfsmuster in Node.js: Verbinden
Ich werde den Weg des Lernens Javascript -> Node.js -> Connect -> Express -> ..., um Erfahren Sie mehr über die Verwendung eines modernen Web-Entwicklungs-Stacks. Ich habe einen Hintergrund in Netzwerken mit niedriger Schicht, also war es einfach, mit den Modulen net
und http
von Node.js aufzustehen. Das allgemeine Muster der Verwendung eines Servers zum Weiterleiten von Anforderungen an unterschiedliche Handler schien natürlich und intuitiv.
Umzug nach Connect, ich fürchte, ich verstehe das Paradigma und den allgemeinen Datenfluss dieser "Middleware" nicht. Zum Beispiel, wenn ich eine Middleware zur Verwendung mit Connect ala erstelle;
// example.js
module.exports = function (opts) {
// ...
return function(req, res, next) {
// ...
next();
};
};
und "Verwendung" in Verbindung über
var example = require('./example');
// ...
var server = connect.createServer();
// ...
server.use(example(some_paramater));
Ich weiß nicht, wann meine Middleware aufgerufen wird. Außerdem, wenn ich andere Middleware bin, kann ich in der Reihenfolge garantiert werden, in der die Middleware aufgerufen wird? Furthermore, ich bin unter der Annahme, dass die Funktion next()
verwendet wird, um die nächste (wieder, wie stelle ich eine Bestellung?) Middleware; Es werden jedoch keine Parameter (req, res, next) übergeben. Werden diese Parameter irgendwie implizit übergeben?
Ich vermute , dass die Sammlung von Middleware-Module aneinandergereiht wird, mit dem Rückruf http
Start -> daher eine Reihe von Funktionen in der Callback-Mitte der ursprünglichen Anfrage hinzugefügt und der Server eine Antwort endet .
Ich versuche, das Middleware-Paradigma zu verstehen, und den Fluss der Information/Ausführung.
Jede Hilfe wird sehr geschätzt. Vielen Dank für das Lesen
Also, wenn ich hatte 'var A = erfordern ('./ A'), B = erfordern ('./ B'); app.use (A()); app.use (B()); 'dann würde' A' vor 'B' stehen, mit' A's 'nächstem' Aufruf' B'? Werden die Parameter dann implizit übergeben? Sonst wie würde 'B' auf' req, res, ect' zugreifen? – gone
Genau. 'req'- und' res'-Objekte wandern durch und sind das gleiche Objekt in der gesamten Kette. Auf diese Weise könnten Sie einige Daten darin speichern und sie später in einer anderen Middleware entlang der Kette wiederverwenden. Genau das passiert mit den meisten Ihrer Daten in 'req'. Zum Beispiel werden POST-Bodydaten standardmäßig nicht geparst und 'express.bodyParser()' Middleware wird es parsen, und Sie haben später Zugriff darauf. – moka
Cool! Danke für die Antwort! – gone