KOA สร้างขึ้นโดยทีม Express ดั้งเดิมมุ่งมั่นที่จะกลายเป็นกรอบเว็บที่เล็กลงแข็งแกร่งขึ้นและแสดงออกได้มากขึ้น การใช้ KOA เพื่อเขียนเว็บแอปพลิเคชันโดยการรวมเครื่องกำเนิดไฟฟ้าที่แตกต่างกันคุณสามารถกำจัดฟังก์ชั่นการโทรกลับที่ซ้ำกันและยุ่งยากและปรับปรุงประสิทธิภาพของการจัดการข้อผิดพลาดทั่วไปอย่างมาก KOA ไม่ผูกมิดเดิลแวร์ใด ๆ ในวิธีเคอร์เนลมันให้บริการฟังก์ชั่นที่มีน้ำหนักเบาและสง่างามเท่านั้นทำให้การเขียนเว็บแอปพลิเคชันใช้งานง่าย
ติดตั้ง KOA
KOA ขึ้นอยู่กับสภาพแวดล้อมโหนดที่รองรับเครื่องกำเนิดไฟฟ้านั่นคือเวอร์ชันของโหนดจะต้องเป็น 0.11.9 หรือสูงกว่ามิฉะนั้นจะไม่ถูกดำเนินการ
ใช้ NPM:
$ npm ติดตั้ง koa
หรือเลือกติดตั้งทั่วโลก:
$ npm ติดตั้ง -g koa
ตัวอย่าง
นี่คือตัวอย่างง่ายๆของ KOA:
var koa = ต้องการ ('koa'); var app = koa (); // loggerapp.use (ฟังก์ชั่น *(ถัดไป) {var start = วันที่ใหม่; ให้ผลต่อไป; World ';}); app.listen (3000);ไม่เหมือนกับฟังก์ชั่นปกติฟังก์ชั่นเครื่องกำเนิดไฟฟ้าจะถูกประกาศเป็นฟังก์ชั่น* ฟังก์ชั่นที่ประกาศด้วยอัตราผลตอบแทนรองรับคำหลักนี้ การใช้งานและความสำคัญของผลตอบแทนจะถูกกล่าวถึงในภายหลัง
ดำเนินการ koa
เมื่อดำเนินการ KOA คุณจะต้องทำงานในโหมด -harmony เพื่อความสะดวกคุณสามารถตั้งค่าโหนดเป็นนามแฝงสำหรับการเริ่มต้นโหมด Harmony โดยค่าเริ่มต้น:
นามแฝง Node = 'Node -Harmony'
ด้วยวิธีนี้คุณสามารถใช้โดยตรงเมื่อดำเนินการ JS ที่เกี่ยวข้อง
การเรียงซ้อน
นี่เป็นแนวคิดที่ค่อนข้างเป็นนามธรรม มิดเดิลแวร์ KOA กำลังเรียงซ้อนกันในแบบดั้งเดิมซึ่งเป็นสิ่งที่เรียกว่า cascading ที่นี่
ในการพัฒนาโหนดก่อนหน้าการใช้การโทรกลับบ่อยครั้งไม่สะดวกในการแสดงตรรกะรหัสที่ซับซ้อน ใน KOA เราสามารถเขียนมิดเดิลแวร์ที่แสดงออกได้อย่างแท้จริง เมื่อเปรียบเทียบกับวิธีการของ Connect ในการใช้มิดเดิลแวร์วิธีการของ KOA ไม่ได้เป็นเพียงการควบคุมมิดเดิลแวร์หลังจากมิดเดิลแวร์จนกว่าโปรแกรมจะสิ้นสุดลง KOA ดำเนินการรหัสเหมือนคลิปกระดาษ เมื่อผู้ใช้ร้องขอให้ผ่านมิดเดิลแวร์จะถูกส่งผ่านไปยังเส้นทางต่อไปที่ตรงตามคำขอ (ดาวน์สตรีม) เมื่ออัตราผลตอบแทนถัดไปไม่สามารถจับภาพมิดเดิลแวร์ถัดไปจะส่งกลับตามลำดับย้อนกลับเพื่อดำเนินการต่อรหัส (ต้นน้ำ) ต่อไป
ตัวอย่างต่อไปนี้แสดงตัวอย่าง Hello World ที่เขียนโดยใช้วิธีการพิเศษนี้: ในตอนแรกคำขอของผู้ใช้จะผ่านมิดเดิลแวร์ X-Response-Response และมิดเดิลแวร์การบันทึก Middlewares ทั้งสองนี้บันทึกรายละเอียดการร้องขอบางอย่างจากนั้น "ผ่าน" มิดเดิลแวร์ตอบกลับหนึ่งครั้งในที่สุดก็จบคำขอและกลับไปที่ "Hello World"
เมื่อโปรแกรมทำงานเพื่อให้ได้ถัดไปการไหลของรหัสจะหยุดการดำเนินการของรหัสที่เหลือของมิดเดิลแวร์และเปลี่ยนเป็นมิดเดิลแวร์ที่กำหนดไว้ถัดไปเพื่อเรียกใช้รหัส วิธีการควบคุมการสลับนี้เรียกว่าดาวน์สตรีม เมื่อไม่มีมิดเดิลแวร์ถัดไปที่จะเรียกใช้งานดาวน์สตรีมรหัสจะถูกเรียกใช้ตามลำดับย้อนกลับ
var koa = ต้องการ ('koa'); var app = koa (); // x-response-timeapp.use (ฟังก์ชั่น *(ถัดไป) {// (1) ป้อนเส้นทาง var เริ่มต้น = วันที่ใหม่; (6) ส่งคืนสิ่งนี้}); // loggerapp.use (ฟังก์ชั่น *(ถัดไป) {// (2) ป้อนตัวบันทึกมิดเดิลแวร์ var เริ่มต้น = วันที่ใหม่; ResponseApp.use (ฟังก์ชั่น *() {// (3) ป้อนมิดเดิลแวร์ตอบกลับและมิดเดิลแวร์ถัดไปที่ตรงกับเงื่อนไขจะไม่ถูกจับและส่งผ่านไปยังต้นน้ำ this.body = 'Hello World';}); app.listen (3000);ในรหัสตัวอย่างด้านบนมิดเดิลแวร์ถูกทำเครื่องหมายไว้ในความคิดเห็นในลำดับที่ดำเนินการ นอกจากนี้คุณยังสามารถลองรันตัวอย่างนี้ด้วยตัวเองและพิมพ์และบันทึกเอาต์พุตและใช้เวลานานของแต่ละลิงก์
.middleware1 {// (1) ทำบางสิ่งบางอย่าง. middleware2 {// (2) ทำสิ่งอื่น ๆ . middleware3 {// (3) ไม่มีผลตอบแทนต่อไป! // this.body = 'Hello World'} // (4) ทำสิ่งอื่นในภายหลัง} // (5) ทำบางสิ่งที่ล่าสุดและกลับมา}คำสั่งการดำเนินการของมิดเดิลแวร์จะถูกทำเครื่องหมายไว้ในรหัสหลอกด้านบน มันดูเหมือนผลผลิตเล็กน้อยเมื่อทับทิมดำเนินการบล็อกหรือไม่? บางทีนี่อาจจะช่วยให้คุณเข้าใจได้ดีขึ้นว่า KOA ทำงานอย่างไร
การดำเนินการฐานข้อมูล KOA Access MySQL
วิธีการใช้งานหนึ่ง (co-mysql)
ไลบรารี MySQL ถูกนำไปใช้ในรูปแบบของการโทรกลับในขณะที่มิดเดิลแวร์ KOA ต้องการรูปแบบของสัญญา หลังจากค้นหาเราพบว่า Co-MYSQL และ MySQL-CO ห้องสมุดทั้งสองมีแนวคิดที่คล้ายกัน MySQL-CO มีระดับการห่อหุ้มที่สูงขึ้นและใช้ MySQL2 ที่เร็วขึ้นในขณะที่ CO-MYSQL นั้นง่ายกว่าเพียงแค่ห่อหุ้ม MySQL.QUERY ในรูปแบบของสัญญา ต่อไปนี้เป็นวิธีการเขียนตาม co-mysql
var wrapper = ต้องการ ('co-mysql'), mysql = ต้องการ ('mysql'); ตัวเลือก var = {โฮสต์: 'localhost', พอร์ต: 3306, ฐานข้อมูล: 'ทดสอบ', ผู้ใช้: 'รูท', รหัสผ่าน: 'รูทรูท'}; ให้ผล this.render ('index', {title: rows [0] .fieldName}); ... }) ();ใช้วิธีการที่สอง (Promisify-Node)
ค้นหาไลบรารี Promisify-Node และคุณสามารถแปลงไลบรารีเป็นแบบฟอร์มสัญญาโดยรวม รหัสตัวอย่างมีดังนี้:
var promisify = reghed ("promisify-node"); var db = promisify ("mydbhelper"); ... var rows = dield db.getById ('tablename', {id: 1}); ให้ผลเช่นนี้ render ('index', {title: rows [0] .fieldName}); ...วิธีการดำเนินการที่สาม (Thunkify, Thunkify-wrap)
การห่อหุ้มยังสามารถเสร็จสิ้นโดยใช้ thunkify Thunkify-wrap เป็นรุ่นที่ได้รับการปรับปรุงของ Thunkify อย่างไรก็ตามตามคำอธิบายวิธีนี้อาจถูกกำจัดในการพัฒนาในอนาคต การใช้งานโดยประมาณมีดังนี้:
var genify = require ('thunkify-wrap'). genify; var db = genify ("mydbhelper"); ... แถว var = dield db.getById ('tablename', {id: 1}); ให้ผลเช่นนี้ render ('index', {title: rows [0] .fieldName}); ...วิธีการใช้งานสี่ (วิธีการโดยตรง)
แปลงรหัสต้นฉบับโดยตรงภายใต้รูปแบบสัญญาอ้างอิงถึง Co-MYSQL และเรียนรู้ความรู้ที่เกี่ยวข้องเกี่ยวกับคำสัญญาอย่างระมัดระวังและทำการแปลงรหัสที่มีอยู่ให้เสร็จสมบูรณ์ รหัสและคำอธิบายมีดังนี้:
dbhelper.js
var config = require ('./ dbconfig'); ตัวเลือก var = {'host': config.db_host, 'พอร์ต': config.db_port, 'ฐานข้อมูล': config.db_name, 'ผู้ใช้': config.db_user, 'password': config.db_passwd} var mysql = ต้องการ mysql.createpool (ตัวเลือก); // การห่อหุ้มภายในของ mysql, เรียกใช้ฟังก์ชันคำสั่ง SQL ExecQuery (SQL, ค่า, การโทรกลับ) {var errinfo; pool.getConnection (ฟังก์ชั่น (err, การเชื่อมต่อ) {ถ้า (err) {errinfo = 'db-get การเชื่อมต่อการเชื่อมต่อฐานข้อมูล!'; โยน errinfo;} else {var querys = connection.query (sql, ค่าฟังก์ชัน การโทรกลับ (null, แถว); // หมายเหตุ: พารามิเตอร์แรกต้องเป็น null}}); } catch (err) {}} // ส่งคืนฟอร์มฟังก์ชั่นสัญญาไปยังอินเตอร์เฟส exports.getById = function (tablename, id) {ส่งคืนสัญญาใหม่ (ฟังก์ชั่น (แก้ไข, ปฏิเสธ) {var ค่า = {id: id}; var sql = 'select * จาก? } else {Resolve (แถว);}})});} เส้นทาง/index.jsvar db = ต้องการ ("../ dbhelper"); ให้ผลเช่นนี้ render ('index', {title: rows [0] .fieldName}); ...รหัส
โปรดดูส่วนการดำเนินการฐานข้อมูลในโครงการนี้ โครงการอยู่ในการพัฒนาอย่างต่อเนื่องและส่วนตัวอย่างฐานข้อมูลถูกนำมาจากโครงการนี้
https://github.com/zhoutk/koadmin.git