KOA, das vom Original -Express -Team erstellt wurde, ist ein kleinerer, stärkerer und ausdrucksstärkerer Web -Framework verpflichtet. Mit KOA zum Schreiben von Webanwendungen können Sie durch Kombination verschiedener Generatoren doppelte und umständliche Rückruffunktionsnisten beseitigen und die Effizienz der gemeinsamen Fehlerbehandlung erheblich verbessern. KOA bindet keine Middleware in Kernel -Methoden, sondern bietet nur eine leichte und elegante Funktionsbibliothek, wodurch das Schreiben von Webanwendungen einfach zu bedienen ist.
KOA installieren
KOA hängt von einer Knotenumgebung ab, die den Generator unterstützt, dh die Version des Knotens muss 0,11,9 oder höher sein, andernfalls wird sie nicht ausgeführt.
Verwenden Sie NPM:
$ NPM KOA installieren
Oder wählen Sie global installieren:
$ npm install -g koa
Beispiel
Hier ist ein einfaches Beispiel für KOA:
var koa = required ('koa'); var app = koa (); // loggerapp.use (Funktion *(nächstes) {var start = neuer Datum; Ertrag als nächstes; var ms = neues Datum - Start; console.log (' %s %s - %s', this.method, this.url, ms); Welt ';}); App.Listen (3000);Im Gegensatz zu normalen Funktionen werden Generatorfunktionen als Funktion*deklariert. Funktionen, die mit dieser Keyword -Support -Rendite deklariert wurden. Die Verwendung und Bedeutung des Ertrags wird später diskutiert.
KOA ausführen
Beim Ausführen von KOA müssen Sie im Harmonie -Modus rennen. Für den Einfachheit halber können Sie den Knoten als Alias für den Start des Harmony -Modus standardmäßig festlegen:
alias node = 'node -harmony'
Auf diese Weise können Sie es direkt verwenden, wenn Sie verwandte JS ausführen.
Kaskadierung
Dies ist ein relativ abstraktes Konzept. KOA Middleware kaskadiert auf sehr traditionelle Weise, was hier als Kaskadierung bezeichnet wird.
In der früheren Knotenentwicklung war die häufige Verwendung von Rückrufen nicht bequem, um eine komplexe Codelogik anzuzeigen. In KOA können wir wirklich ausdrucksstarke Middleware schreiben. Im Vergleich zur Methode von Connect zur Implementierung von Middleware besteht der KOA -Ansatz nicht nur darin, die Kontrolle über Middleware nach Middleware zu übergeben, bis das Programm endet. KOA führt Code wie einen Büroclip aus. Wenn der Benutzer anfordert, die Middleware zu übergeben, wird er an die nächste Route übergeben, die der Anfrage (nachgelagert) erfüllt. Wenn die Ausbeute als nächstes die nächste Middleware nicht erfassen kann, wird in umgekehrter Reihenfolge zurückgegeben, um den Code (stromaufwärts) weiter auszuführen.
Das folgende Beispiel zeigt das Hello World-Beispiel, das mit dieser speziellen Methode geschrieben wurde: Am Anfang geht die Anforderung des Benutzers durch die X-Response-Zeit Middleware und die Protokollierung Middleware. Diese beiden Middlewares -Anforderungsdetails erfassen und dann die Antwort Middleware "durchlaufen", beenden Sie schließlich die Anfrage und kehren zu "Hello World" zurück.
Wenn das Programm als nächstes ausgeführt wird, pausiert der Codefluss die Ausführung des verbleibenden Codes der Middleware und wechselt zur nächsten definierten Middleware, um den Code auszuführen. Diese Art des Umschaltens der Steuerung wird nachgeschaltet bezeichnet. Wenn es keine nächste Middleware gibt, um stromabwärts auszuführen, wird der Code in umgekehrter Reihenfolge ausgeführt.
var koa = required ('koa'); var app = koa (); // x-response-timeapp.use (Funktion *(nächstes) {// (1) Geben Sie die Route var start = new Date; Ertrag als nächstes; // (5) Geben Sie die X-Response Time Middleware erneut auf und die Zeit "Reisen" durch dieses Mittelwerk var MS = New Date. (6) Return this.body}); // loggerapp.use (Funktion *(Weiter) {// (2) Geben Sie Logger Middleware var start = neuer Datum ein; ResponseApp.use (function *() {// (3) Geben Sie die Antwort Middleware ein, und die nächste Middleware, die den Bedingungen erfüllt, wird nicht erfasst und an stromaufwärts übergeben.body = 'Hello World';});Im obigen Beispielcode wurde die Middleware in den Kommentaren in der Reihenfolge gekennzeichnet, in der sie ausgeführt wird. Sie können auch versuchen, dieses Beispiel selbst auszuführen und die Ausgabe und zeitaufwändige jedes Link zu drucken und aufzunehmen.
.Middleware1 {// (1) Machen Sie ein paar Dinge .Middleware2 {// (2) Machen Sie ein paar andere Dinge .Middleware3 {// (3) Keine nächste Rendite! // this.body = 'Hello World'} // (4) Mach ein paar andere Sachen später} // (5) Mach ein paar Sachen zuletzt und kehrt zurück}Die Ausführungsreihenfolge der Middleware ist im obigen Pseudo-Code markiert. Sieht es ein bisschen wie die Ausbeute aus, wenn Ruby einen Block ausführt? Vielleicht hilft Ihnen das besser zu verstehen, wie KOA funktioniert.
KOA -Zugriff auf die MySQL -Datenbankoperation
Implementierungsmethode 1 (CO-MYSQL)
Die MySQL -Bibliothek wird in Form von Rückrufen implementiert, während die KOA Middleware die Form des Versprechens erfordert. Nach der Suche stellten wir fest, dass Co-Mysql und MySQL-Co. Die beiden Bibliotheken haben ähnliche Ideen. MySQL-CO hat einen höheren Kapselungsgrad und verwendet das schnellere MySQL2, während Co-Mysql einfacher ist und nur mySQL.Query in Form von Versprechen verkapsend ist. Das Folgende ist die Schreibmethode basierend auf Co-Mysql
var wrack = required ('co-mysql'), mysql = required ('mysql'); var options = {host: 'localhost', port: 3306, Datenbank: 'test', user: 'root', password: 'rootroot'}; rufe this.render ('index', {title: Zeilen [0] .FieldName}); ...}) ();Methode zwei implementieren (Promisify-Node)
Finden Sie die Versprechen-Node-Bibliothek, und Sie können die Bibliothek in ein Versprechensformular als Ganzes umwandeln. Der Beispielcode lautet wie folgt:
var promisify = required ("promisify-node"); var db = promisify ("mydbhelper"); ... var rows = relief db.getById ('tableName', {id: 1}); Rufe this.render ('Index', {Titel: Zeilen [0] .FieldName}); ...Implementierungsmethode drei (Thunkify, Thunkify-Wrap)
Die Kapselung kann auch mit Thunkify abgeschlossen werden. Thunkify-Wrap ist eine verbesserte Version von Thunkify. Nach der Erklärung kann diese Methode jedoch in der zukünftigen Entwicklung beseitigt werden. Die ungefähre Verwendung ist wie folgt:
var genify = required ('thunkify-wrap'). Genify; var db = genify ("mydbhelper"); ... var rows = relief db.getById ('tableName', {id: 1}); Rufe this.render ('Index', {Titel: Zeilen [0] .FieldName}); ...Implementierungsmethode vier (direkte Methode)
Verwandeln Sie den ursprünglichen Code unter Express direkt in ein Versprechensformular, beziehen Sie sich auf Co-MYSQL und lernen Sie die relevanten Kenntnisse über Versprechen sorgfältig und vervollständigen Sie die Transformation des vorhandenen Codes. Der Code und die Beschreibung sind wie folgt:
dbhelper.js
var config = required ('./ dbconfig'); var options = {'host': config.db_host, 'port': config.db_port, 'database': config.db_name, 'user': config.db_user, 'password': config.db_passwd} var mysql = fordert ('mySql'). MySQL.Createpool (Optionen); // Interne Kapselung von MySQL, SQL Anweisung Function ExecQuery (SQL, Werte, Rückruf) {var errinfo; pool.getConnection (function (err, connection) {if (err) {errinfo = 'db-Get-Datenbankverbindungs-Ausnahme!'; Throw errinfo;} else {var querys = connection.Query (SQL, Werte, Funktion (Erst-SQL) {Release (Connection); Callback (NULL, Zeilen); } catch (err) {}} // Rückgabe des Versprechensfunktionsformulars an die externe Schnittstelle exports.getById = Funktion (tableName, id) {return New Promise (Funktion (Auflösen, ablehnen) {var values = {id: id}; var sql = 'select * from? Where?'; Ablehnung (errand)} else {Resolve (Zeilen);}})}); Rufe this.render ('Index', {Titel: Zeilen [0] .FieldName}); ...Code
In diesem Projekt finden Sie im Abschnitt "Datenbankbetrieb". Das Projekt befindet sich in der kontinuierlichen Entwicklung und der Abschnitt mit Datenbankbeispiel wird aus diesem Projekt entnommen.
https://github.com/zhoutk/koadmin.git