تلتزم KOA ، الذي أنشأه فريق Express Original ، بأن يصبح إطارًا على شبكة الإنترنت أصغر وأقوى وأكثر تعبيراً. باستخدام KOA لكتابة تطبيقات الويب ، من خلال الجمع بين المولدات المختلفة ، يمكنك التخلص من وظيفة رد الاتصال المكررة والمرهقة بشكل كبير وتحسين كفاءة معالجة الأخطاء الشائعة. لا يربط KOA أي برامج وسيطة في أساليب kernel ، بل توفر فقط مكتبة خفيفة الوزن وأنيقة من الوظائف ، مما يجعل تطبيقات الويب كتابة سهلة الاستخدام.
تثبيت KOA
يعتمد KOA على بيئة العقدة التي تدعم المولد ، أي إصدار العقدة يجب أن يكون 0.11.9 أو أعلى ، وإلا فلن يتم تنفيذه.
استخدم NPM:
$ NPM تثبيت KOA
أو حدد تثبيت عالميًا:
$ NPM تثبيت -G KOA
مثال
فيما يلي مثال بسيط على KOA:
var koa = require ('koa') ؛ var app = koa () ؛ // loggerapp.use (function *(next) {var start = new date ؛ griven next ؛ var ms = new date - start ؛ console.log ('٪ s - ٪ s' ، this.method ، this.url ، ms) ؛ World '؛}) ؛ app.listen (3000) ؛على عكس الوظائف العادية ، يتم الإعلان عن وظائف المولد كدالة*. تعلن الوظائف مع عائد دعم الكلمات الرئيسية هذا. سيتم مناقشة استخدام وأهمية العائد لاحقًا.
تنفيذ KOA
عند تنفيذ KOA ، تحتاج إلى الركض في وضع harmony. للراحة ، يمكنك تعيين العقدة كمستعار لبدء وضع الوئام افتراضيًا:
الاسم المستعار Node = 'Node -Harmony'
بهذه الطريقة ، يمكنك استخدامه مباشرة عند تنفيذ JS ذات الصلة.
متتالية
هذا مفهوم مجردة نسبيا. تتشكل الوسيطة الوسيطة KOA بطريقة تقليدية للغاية ، وهو ما يسمى بالتتابع هنا.
في تطوير العقدة السابقة ، لم يكن الاستخدام المتكرر لعمليات الاسترجاعات مريحة لإظهار منطق الرمز المعقد. في KOA ، يمكننا كتابة البرامج الوسيطة التعبيرية حقًا. بالمقارنة مع طريقة Connect لتنفيذ البرامج الوسيطة ، فإن نهج KOA ليس ببساطة تسليم التحكم إلى الوسيطة بعد البرامج الوسيطة حتى ينتهي البرنامج. KOA ينفذ رمز مثل مقطع الورق. عندما يطلب المستخدم اجتياز البرامج الوسيطة ، سيتم تمريره إلى المسار التالي الذي يلبي الطلب (المصب). عندما لا يمكن للعائد بعد ذلك التقاط البرامج الوسيطة التالية ، فإنه يعود بترتيب عكسي لمواصلة تنفيذ الكود (المنبع).
يوضح المثال التالي مثال Hello World الذي تم كتابته باستخدام هذه الطريقة الخاصة: في البداية ، يمر طلب المستخدم عبر البرامج الوسيطة لوقت الاستجابة X وويديز التسجيل. تسجل هذان الأدوات المتوسطة بعض تفاصيل الطلب ، ثم "يمر عبر" برامج الاستجابة الوسيطة مرة واحدة ، تنهي الطلب أخيرًا والعودة إلى "Hello World".
عندما يتم تشغيل البرنامج إلى العائد التالي ، سيقوم تدفق الكود بإيقاف تنفيذ الكود المتبقي للبرامج الوسيطة والتبديل إلى الوسيطة المحددة التالية لتنفيذ الرمز. تسمى طريقة التحكم في التبديل هذه. عندما لا يكون هناك برامج وسيطة التالية لتنفيذ المصب ، سيتم تنفيذ الرمز بترتيب عكسي.
var koa = require ('koa') ؛ var app = koa () ؛ // x-response-timeapp.use (function *(next) {// (1) أدخل Route var start = new date ؛ griving next ؛ ] ms) ؛}) ؛ // revieP.use (function *() {// (3) أدخل الوسيطة الاستجابة ، والبرنامج الوسيط التالي الذي يلبي الظروف لا يتم التقاطه ، وتم تمريره إلى المنبع this.body = 'hello world' ؛}) ؛ app.listen (3000) ؛في رمز المثال أعلاه ، تم وضع علامة على البرامج الوسيطة في التعليقات بالترتيب الذي يتم تنفيذه. يمكنك أيضًا محاولة تشغيل هذا المثال بنفسك وطباعة وتسجيل الإخراج وتستغرق وقتًا طويلاً لكل رابط.
.middleware1 {// (1) قم ببعض الأشياء. middleware2 {// (2) قم ببعض الأشياء الأخرى .middleware3 {// (3) لا العائد التالي! // this.body = 'Hello World'} // (4) قم ببعض الأشياء الأخرى لاحقًا} // (5) قم ببعض الأشياء أخيرًا وإرجاع}يتم وضع علامة على ترتيب تنفيذ البرامج الوسيطة في الكود الزائف أعلاه. هل يبدو مثل العائد عندما ينفذ روبي كتلة؟ ربما سيساعدك هذا بشكل أفضل على فهم كيفية عمل KOA.
KOA Access MySQL Operation
طريقة التنفيذ الأولى (co-mysql)
يتم تنفيذ مكتبة MySQL في شكل عمليات الاسترجاعات ، في حين أن الوسيطة الوسيطة KOA تتطلب شكل وعد. بعد البحث ، وجدنا أن Co-MySQL و MySQL-Co. المكتبان لهما أفكار مماثلة. يتمتع MySQL-CO بدرجة أعلى من التغليف ويستخدم MySQL2 الأسرع ، في حين أن المشاركين في الأطراف أبسط ، فقط تغليف mysql.query في شكل وعد. ما يلي هو طريقة الكتابة على أساس المشاركين mysql
var wrapper = require ('co-mysql') ، mysql = require ('mysql') ؛ var reports = {host: 'localhost' ، port: 3306 ، database: 'test' ، user: 'root' ، password: 'rootroot'} ؛ var pool = mysql.createpool (report) ، p = pool) ؛ ... ... var. العائد this.render ('index' ، {title: rows [0] .FieldName}) ؛ ...}) () ؛تنفيذ الطريقة الثانية (الالتهاب)
ابحث عن مكتبة عقدة الالتهاب ، ويمكنك تحويل المكتبة إلى نموذج وعد ككل. رمز العينة كما يلي:
var prosisify = require ("prosisify-ode") ؛ var db = prosisify ("mydbhelper") ؛ ... var rows = griven db.getbyid ('tablename' ، {id: 1}) ؛ العائد this.render ('index' ، {title: rows [0] .FieldName}) ؛ ...طريقة التنفيذ الثالثة (thunkify ، thunkify-wrap)
يمكن أيضًا إكمال التغليف باستخدام thunkify. Thunkify-WRAP هي نسخة محسّنة من Thunkify. ومع ذلك ، وفقًا للتفسير ، قد يتم القضاء على هذه الطريقة في التنمية المستقبلية. الاستخدام التقريبي على النحو التالي:
var genify = require ('thunkify-wrap'). genify ؛ var db = genify ("mydbhelper") ؛ ... var rows = grivd db.getbyid ('tablename' ، {id: 1}) ؛ العائد this.render ('index' ، {title: rows [0] .FieldName}) ؛ ...طريقة التنفيذ الرابعة (الطريقة المباشرة)
قم بتحويل الكود الأصلي مباشرة تحت نموذج الوعد ، والرجوع إلى المشاركين ، وتعلم بعناية المعرفة ذات الصلة بالوعد ، واستكمال تحول الكود الحالي. الرمز والوصف على النحو التالي:
dbhelper.js
var config = require ('./ dbconfig') ؛ var reports = {'host': config.db_host ، 'port': config.db_port ، 'database': config.db_name ، 'user': config.db_user ، 'password': config.db_passwd} var mysql = require mysql.createpool (خيارات) ؛ // التغليف الداخلي لـ mysql ، تنفيذ وظيفة SQL execquery (SQL ، القيم ، رد الاتصال) {var errinfo ؛ pool.getConnection (function (err ، connection) {if (err) {errinfo = 'db-get database connection issection! Callback (NULL ، الصفوف) ؛ } catch (err) {}} // إرجاع نموذج دالة الوعد إلى exports.getById orportbyid = function (tablename ، id) } آخر {حل (صفوف) ؛ العائد this.render ('index' ، {title: rows [0] .FieldName}) ؛ ...شفرة
يرجى الرجوع إلى قسم تشغيل قاعدة البيانات في هذا المشروع. المشروع في التطوير المستمر ويأخذ قسم مثال قاعدة البيانات من هذا المشروع.
https://github.com/zhoutk/koadmin.git