Heim >Web-Frontend >js-Tutorial >Eine eingehende Analyse des „Zwiebelmodells' in Nodejs

Eine eingehende Analyse des „Zwiebelmodells' in Nodejs

青灯夜游
青灯夜游nach vorne
2021-05-07 10:29:554121Durchsuche

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.

Eine eingehende Analyse des „Zwiebelmodells' in Nodejs

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

1 Wir haben Zwiebeln. Wissen Sie, eine Schicht ist Schicht für Schicht um eine andere gewickelt, aber anstatt ihre dreidimensionale Struktur zu betrachten, müssen wir jetzt die Zwiebel schneiden und sie von der Schnittebene aus betrachten, wie im Bild gezeigt:

Eine eingehende Analyse des „Zwiebelmodells in Nodejs 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

Zu den beliebtesten Node.js-Frameworks gehören derzeit Express, KOA und Egg.js. Unabhängig davon, um welches Node.js-Framework es sich handelt, wird es auf der Grundlage von Middleware und Middleware implementiert (Kann als Klasse oder Funktionsmodul verstanden werden) Die Ausführungsmethode muss auf dem Zwiebelmodell basieren

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

Am Beispiel von Express ist das Folgende ein grundlegender Ausführungsprozess von Middleware:

,

Eine eingehende Analyse des „Zwiebelmodells in NodejsEine eingehende Analyse des „Zwiebelmodells in NodejsKoa 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.
  • Express verarbeitet Middleware basierend auf Rückrufe, während KOA auf „await/async“ basiert;
  • Bei der asynchronen Ausführung von Middleware folgt Express nicht strikt dem Zwiebelmodell, um Middleware auszuführen, während KOA diesem strikt folgt (was widerspiegelt, dass die beiden Prozesse unterschiedlich sind, wenn die Middleware ein ist asynchrone Funktion sind unterschiedlich).
Einführung in die Unterschiede zwischen Express und KOA hinsichtlich der Ausführung des Zwiebelmodells

: 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:

Eine eingehende Analyse des „Zwiebelmodells in NodejsEs 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) Koa

Behalten 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:

Eine eingehende Analyse des „Zwiebelmodells in NodejsSie 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:

Programmierlehre

! !

Das 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen