Heim >Web-Frontend >js-Tutorial >Eine eingehende Analyse des „Zwiebelmodells' in Nodejs
In diesem Artikel erfahren Sie mehr über das „Zwiebelmodell“ in Nodejs. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Zu den populäreren Node.js-Frameworks gehören derzeit Express, KOA und Egg.js, gefolgt von einem weiteren aufkommenden TypeScript-bezogenen Framework – Nest.js. Egal um welches Node.js-Framework es sich handelt, es wird implementiert Basierend auf Middleware, und die Ausführungsmethode der Middleware (kann als Klasse oder Funktionsmodul verstanden werden) muss auf dem Zwiebelmodell basieren
Empfohlenes Lernen: „nodejs Tutorial“
Es ist ersichtlich, dass Sie, um durch den Mittelpunkt der Zwiebel zu gelangen, zunächst Schicht für Schicht in die Zwiebelschale bis zum Mittelpunkt und dann Schicht für Schicht vom Mittelpunkt nach außen in die Schale eindringen müssen . Hier gibt es eine Besonderheit: Wie viele Hautschichten müssen entfernt werden, wie viele Hautschichten müssen beim Ausgehen abgenutzt werden. Zuerst in die Epidermis einzudringen und sie dann wieder zu verlassen, entspricht dem Prinzip dessen, was wir Stapelliste nennen: Wer zuerst rein, zuletzt raus.
2. Die Beziehung zwischen dem Zwiebelmodell und Node
Die Schale der Zwiebel kann als Middleware betrachtet werden:
Der Prozess von außen nach innen ist ein Schlüsselwort als nächstes( );Und von innen nach außen gelangt jede Middleware nach der Ausführung in die ursprüngliche obere Schicht der Middleware bis hin zur äußersten Schicht.
3. Ausführung von Middleware
Koa ist ein Knoten-Framework der nächsten Generation, das vom selben Team auf Basis von Express entwickelt wurde. Der Hauptunterschied:
Express kapselt und verfügt über viele integrierte Middleware, wie Connect und Router, während KOA relativ leichtgewichtig ist und Entwickler das Framework an ihre eigenen Bedürfnisse anpassen können.: Wir
behalten die ursprünglichen drei Middlewares des obigen Beispielcodes bei und fügen zwischen 2 und 3 eine neue asynchrone Middleware ein, die Der Code lautet wie folgt:
(1) express/**
* 异步中间件
*/
app.use(async (req, res, next) => {
console.log('async');
await next();
await new Promise(
(resolve) =>
setTimeout(
() => {
console.log(`wait 1000 ms end`);
resolve()
},
1000
)
);
console.log('async end');
});
Dann ändern Sie die andere Middleware so, dass sie auf die next()-Methode wartet, wie in der folgenden Middleware-1-Methode gezeigt:
/** * 中间件 1 */ app.use(async (req, res, next) => { console.log('first'); await next(); console.log('first end'); });
Rerun, das endgültige Ausgabeergebnis ist:
Es ist ersichtlich, dass es normal ist, von außen nach innen aufzurufen, und dass Aufrufe Schicht für Schicht erfolgen. Beim Übergang von innen nach außen gibt es jedoch einige Änderungen. Der Hauptgrund ist, dass
die asynchrone Middleware keine Ausgabe durchführt Die Ausführungsergebnisse sind in Ordnung.
(2) KoaBehalten Sie die obige Codesequenz bei und ändern Sie nur die entsprechende Express-Syntax in die Koa-Syntax. Die Codeteile für Middleware 1 und asynchrone Middleware lauten wie folgt: const Koa = require('koa');
const app = new Koa();
/**
* 中间件 1
*/
app.use(async (ctx, next) => {
console.log('first');
await next();
console.log('first end');
});
/**
* 异步中间件
*/
app.use(async (ctx, next) => {
console.log('async');
await next();
await new Promise(
(resolve) =>
setTimeout(
() => {
console.log(`wait 1000 ms end`);
resolve()
},
1000
)
);
console.log('async end');
});
Erneut ausführen, das endgültige Ausgabeergebnis ist:
Sie werden feststellen, dass KOA sich strikt an die Ausführung des Zwiebelmodells hält, von oben nach unten, also von der Innenseite der Zwiebel nach außen, zuerst die Ausgabe, dann die zweite, asynchrone Ausgabe und dann die dritte Ausgabe Ende von innen nach außen, asynchrones Ende, zweites Ende, erstes Ende.
Weitere Kenntnisse zum Thema Programmierung finden Sie unter:
ProgrammierlehreDas obige ist der detaillierte Inhalt vonEine eingehende Analyse des „Zwiebelmodells' in Nodejs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!