KOA, yang dibuat oleh tim Express asli, berkomitmen untuk menjadi kerangka kerja web yang lebih kecil, lebih kuat, dan lebih ekspresif. Menggunakan KOA untuk menulis aplikasi web, dengan menggabungkan generator yang berbeda, Anda dapat menghilangkan duplikat dan rumit fungsi callback bersarang dan sangat meningkatkan efisiensi penanganan kesalahan umum. KOA tidak mengikat middleware apa pun dalam metode kernel, ini hanya menyediakan perpustakaan fungsi yang ringan dan elegan, membuat aplikasi web menulis mudah digunakan.
Instal KOA
KOA tergantung pada lingkungan simpul yang mendukung generator, yaitu, versi node harus 0,11,9 atau lebih tinggi, jika tidak itu tidak akan dieksekusi.
Gunakan NPM:
$ npm menginstal koa
Atau, pilih Instal secara global:
$ npm instalasi -g koa
Contoh
Berikut adalah contoh sederhana dari KOA:
var koa = require('koa');var app = koa();// loggerapp.use(function *(next){ var start = new Date; yield next; var ms = new Date - start; console.log('%s %s - %s', this.method, this.url, ms);});// responseapp.use(function *(){ this.body = 'Hello Dunia ';}); app.listen (3000);Tidak seperti fungsi normal, fungsi generator dinyatakan sebagai fungsi*. Fungsi dinyatakan dengan hasil dukungan kata kunci ini. Penggunaan dan pentingnya hasil akan dibahas nanti.
Jalankan KOA
Saat mengeksekusi KOA, Anda harus menjalankan dalam mode -harmony. Untuk kenyamanan, Anda dapat mengatur node sebagai alias untuk memulai mode harmoni secara default:
alias node = 'node --harmony'
Dengan cara ini, Anda dapat menggunakannya secara langsung saat menjalankan JS terkait.
Cascading
Ini adalah konsep yang relatif abstrak. Middleware KOA mengalir dengan cara yang sangat tradisional, yang disebut cascading di sini.
Dalam pengembangan simpul sebelumnya, sering menggunakan callback tidak nyaman untuk menunjukkan logika kode yang kompleks. Di KOA, kita dapat menulis middleware yang benar -benar ekspresif. Dibandingkan dengan metode Connect untuk mengimplementasikan middleware, pendekatan KOA bukan hanya untuk menyerahkan kontrol ke middleware setelah middleware sampai program berakhir. KOA menjalankan kode seperti klip kertas. Ketika pengguna meminta untuk melewati middleware, itu akan diteruskan ke rute berikutnya yang memenuhi permintaan (hilir). Ketika hasil berikutnya tidak dapat menangkap middleware berikutnya, ia kembali dalam urutan terbalik untuk terus mengeksekusi kode (hulu).
Contoh berikut menunjukkan contoh Hello World yang ditulis menggunakan metode khusus ini: Di awal, permintaan pengguna melewati middleware waktu-X-response dan middleware logging. Dua tiddwares ini mencatat beberapa detail permintaan, dan kemudian "melewati" middleware respons sekali, akhirnya mengakhiri permintaan dan kembali ke "Hello World".
Ketika program berjalan untuk menghasilkan selanjutnya, aliran kode akan menghentikan pelaksanaan kode middleware yang tersisa dan beralih ke middleware yang ditentukan berikutnya untuk menjalankan kode. Cara mengganti kontrol ini disebut hilir. Ketika tidak ada middleware berikutnya untuk dieksekusi hilir, kode akan dieksekusi dalam urutan terbalik.
var koa = membutuhkan ('koa'); var app = koa (); // x-response-timeApp.use (fungsi *(selanjutnya) {// (1) Masukkan rute var start = tanggal baru; hasilkan berikutnya; // (5) MS. 'MS.' MS. '-RESPONSE Middleware lagi dan merekam waktu "Travelled" Travelled "melalui ms MS = ms = ms = ms. // (6) kembalikan this.body}); // loggerapp.use (fungsi *(selanjutnya) {// (2) Masukkan logger middleware var start = tanggal baru; hasil berikutnya; // (4) Masukkan logger middleware lagi dan catat waktu ketika "berjalan" melalui middleware ini dua kali ms = tanggal baru - start; konsol. ms);}); // responseApp.use (function *() {// (3) Masukkan middleware respons, dan middleware berikutnya yang memenuhi persyaratan tidak ditangkap, dan diteruskan ke hulu this.body = 'hello world';}); app.listen (3000);Dalam kode contoh di atas, middleware telah ditandai dalam komentar dalam urutan yang dieksekusi. Anda juga dapat mencoba menjalankan contoh ini sendiri dan mencetak dan merekam output dan memakan waktu dari setiap tautan.
.middleWare1 {// (1) Lakukan beberapa hal .middleware2 {// (2) Lakukan beberapa hal lain .middleware3 {// (3) Tidak ada hasil berikutnya! // this.body = 'hello world'} // (4) Lakukan beberapa hal lain nanti} // (5) Lakukan beberapa hal terakhir dan kembali}Urutan eksekusi middleware ditandai dalam kode pseudo di atas. Apakah itu terlihat seperti hasil ketika Ruby mengeksekusi blok? Mungkin ini akan membantu Anda lebih memahami cara kerja KOA.
KOA Access MySQL Database Operation
Metode Implementasi Satu (Co-MYSQL)
Perpustakaan MySQL diimplementasikan dalam bentuk panggilan balik, sedangkan middleware KOA membutuhkan bentuk janji. Setelah mencari, kami menemukan bahwa co-mysql dan mysql-co. Kedua perpustakaan memiliki ide serupa. MySQL-CO memiliki derajat enkapsulasi yang lebih tinggi dan menggunakan mysql2 yang lebih cepat, sedangkan co-mysql lebih sederhana, hanya merangkum mysql.query ke dalam bentuk janji. Berikut ini adalah metode penulisan berdasarkan co-mysql
var wrapper = membutuhkan ('co-mysql'), mysql = membutuhkan ('mysql'); var options = {host: 'localhost', port: 3306, basis data: 'tes', pengguna: 'root', kata sandi: 'rootroot'}; pool pool = mysql.createPool (opsi), p. 1) (pool) (pool var = mysql.createPool (opsi), p. 'pool) (pool = mysql.createPool (option), pound (poPper = wrapper); pool = mysql.createPool (option), poulprapper (pool); menghasilkan this.render ('index', {title: baris [0] .fieldName}); ...}) ();Implementasikan metode dua (janji-node)
Temukan perpustakaan janji-simpul, dan Anda dapat mengubah perpustakaan menjadi bentuk janji secara keseluruhan. Kode sampel adalah sebagai berikut:
var promisify = membutuhkan ("promisify-node"); var db = promisify ("mydbhelper"); ... var baris = hasil db.getById ('tableName', {id: 1}); Hasil this.render ('index', {title: baris [0] .fieldName}); ...Metode Implementasi Tiga (Thunkify, Thunkify-Wrap)
Enkapsulasi juga dapat diselesaikan menggunakan Thunkify. Thunkify-Wrap adalah versi yang disempurnakan dari Thunkify. Namun, menurut penjelasannya, metode ini dapat dieliminasi dalam pengembangan di masa depan. Perkiraan penggunaan adalah sebagai berikut:
var genify = membutuhkan ('thunkify-wrap'). genify; var db = genify ("mydbhelper"); ... var baris = hasil db.getById ('tableName', {id: 1}); Hasil this.render ('index', {title: baris [0] .fieldName}); ...Metode Implementasi Empat (Metode Langsung)
Secara langsung mengubah kode asli di bawah Express ke dalam bentuk janji, lihat co-mysql, dan dengan hati-hati mempelajari pengetahuan yang relevan tentang janji, dan melengkapi transformasi kode yang ada. Kode dan deskripsi adalah sebagai berikut:
dbhelper.js
var config = require('./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 = require('mysql');var pool = mysql.createPool (opsi); // enkapsulasi internal mysql, jalankan function function execquery (sql, value, callback) {var errinfo; pool.getConnection (function (err, koneksi) {if (err) {errinfo = 'db-get database connection Exception!'; throw errinfo;} else {var querys = connection.Query (sql, values, function (err, berkir) {rilis (koneksi); if (err) {errinfo, ever {ever-{ever-{erry (errin) {erry (errin) {erry (errin) {erry) {{errin) {erry) Callback (NULL, ROWS); // CATATAN: Parameter pertama harus null}}); } catch (err) {}} // Kembalikan formulir fungsi janji ke antarmuka eksternal exports.getbyid = function (TableName, id) {return new janji (function (resolve, reject) {var values = {id: id}; var sql = 'pilih * dari mana? } else {resolve (baris);}})});} rute/index.jsvar db = membutuhkan ("../ dbhelper"); ... var baris = hasil db.getById ('tableName', {id: 1}); Hasil this.render ('index', {title: baris [0] .fieldName}); ...Kode
Silakan merujuk ke bagian operasi database dalam proyek ini. Proyek ini sedang dalam pengembangan berkelanjutan dan bagian contoh database diambil dari proyek ini.
https://github.com/zhoutk/koadmin.git