Коа, созданная оригинальной командой Express, стремится стать меньшей, более сильной и более выразительной веб -структурой. Используя KOA для написания веб -приложений, комбинируя различные генераторы, вы можете устранить дубликат и громоздкую функцию обратного вызова и значительно повысить эффективность общей обработки ошибок. KOA не связывает какое -либо промежуточное программное обеспечение в методах ядра, оно предоставляет только легкую и элегантную библиотеку функций, что делает написание веб -приложений простыми в использовании.
Установите KOA
KOA зависит от среды узла, которая поддерживает генератор, то есть версия узла должна быть 0,11,9 или выше, иначе она не будет выполнена.
Используйте NPM:
$ npm установить KOA
Или выберите «Установить глобально»:
$ npm install -g koa
Пример
Вот простой пример коа:
var koa = require ('koa'); var app = koa (); // loggerapp.use (function *(next) {var start = new Date; hield Next; var ms = new Date - start; console.log (' %s %s - %s', this.method, this.url, ms);}); // responseaep.use (function *() World ';}); app.listen (3000);В отличие от нормальных функций, функции генератора объявляются как функция*. Функции, объявленные этим ключевым словом, доходностью поддержки. Использование и значение урожайности будут обсуждаться позже.
Выполнить коа
При выполнении KOA вам нужно запустить в режиме -Harmony. Для удобства вы можете установить узел в качестве псевдонима для начала режима гармонии по умолчанию:
псевдоним node = 'node -harmony'
Таким образом, вы можете использовать его напрямую при выполнении связанного JS.
Каскад
Это относительно абстрактная концепция. Промежуточное программное обеспечение KOA каскад очень традиционно, что здесь называется каскадным.
В предыдущей разработке узлов частое использование обратных вызовов не было удобно для отображения сложной логики кода. В KOA мы можем написать по -настоящему выразительное промежуточное программное обеспечение. По сравнению с методом Connect для реализации промежуточного программного обеспечения, подход KOA не просто для того, чтобы передать управление промежуточным программным обеспечением после промежуточного программного обеспечения до завершения программы. KOA выполняет код как складка. Когда пользователь просит пройти промежуточное программное обеспечение, оно будет передано следующему маршруту, который соответствует запросу (вниз по течению). Когда выход следующий не может захватить следующее промежуточное программное обеспечение, он возвращается в обратном порядке, чтобы продолжить выполнение кода (вверх по течению).
В следующем примере показан пример Hello World, написанный с использованием этого специального метода: В начале запрос пользователя проходит через промежуточное программное обеспечение времени от ответа и промежуточное программное обеспечение для ведения журнала. Эти два Middlewares записывают некоторые данные запроса, а затем «проходят через» промежуточное программное обеспечение ответа, наконец завершают запрос и вернулись в «Hello World».
Когда программа запускается для получения следующего, поток кода приостановит выполнение оставшегося кода промежуточного программного обеспечения и переключается на следующее определенное промежуточное программное обеспечение для выполнения кода. Этот способ переключения управления называется вниз по течению. Когда нет следующего промежуточного программного обеспечения для выполнения вниз по течению, код будет выполнен в обратном порядке.
var koa = require ('koa'); var app = koa (); // x-response-timeapp.use (function *(Далее) {// (1) Введите маршрут var start = new Date; далее; // (5) Введите x-response-time Sware снова и запишите время «проходит». (6) вернуть это.body}); // loggerApp.use (function *(Далее) {// (2) Введите промежуточное программное обеспечение logger var start = новая дата; дата далее; // (4) Введите промежуточное программное обеспечение Logger и запишите время, когда оно перемещается »через это промежуточное программное обеспечение дважды var ms = new - start; console.log (' %s %s', это. responseapp.use (function *() {// (3) Введите промежуточное программное обеспечение ответа, а следующее промежуточное программное обеспечение, которое соответствует условиям, не захвачено, и передается вверх по течению this.body = 'hello world';}); app.listen (3000);В примере приведенного выше промежуточного программного обеспечения было отмечено в комментариях в том порядке, в котором оно выполнено. Вы также можете попробовать запустить этот пример самостоятельно и распечатать и записать вывод и трудоемкий порядок каждой ссылки.
.middleware1 {// (1) Сделайте кое -что .middleware2 {// (2) Сделайте некоторые другие вещи .middleware3 {// (3) Нет следующего выхода! // this.body = 'hello world'} // (4) сделать что -то еще позже} // (5) сделать кое -что последнее и вернуть}Порядок выполнения промежуточного программного обеспечения отмечен в псевдокоде выше. Это похоже на выход, когда Ruby выполняет блок? Может быть, это поможет вам лучше понять, как работает KOA.
KOA Access MySQL Работа базы данных
Метод реализации один (co-mysql)
Библиотека MySQL реализована в форме обратных вызовов, в то время как промежуточное программное обеспечение KOA требует формы обещания. После поиска мы обнаружили, что Co-Mysql и Mysql-Co. Две библиотеки имеют похожие идеи. MySQL-CO имеет более высокую степень инкапсуляции и использует более быстрый MySQL2, в то время как Co-MySQL проще, просто инкапсулируя MySQL.QUERY в форму обещания. Ниже приведен метод написания, основанный на co-mysql
var wroubper = require ('co-mysql'), mysql = require ('mysql'); var options = {host: 'localhost', порт: 3306, база данных: 'test', пользователь: 'root', пароль: 'root vart'}; var pool = mysql.createpool (опции), p = warpper (pool); Glive this.render ('index', {title: rows [0] .fieldname}); ...}) ();Реализовать метод второй (romisify-node)
Найдите библиотеку «Обозначение узлов», и вы можете преобразовать библиотеку в форму обещания в целом. Пример кода заключается в следующем:
var vormisify = require ("promisify-node"); var db = propify ("mydbhelper"); ... var rows = gilt db.getbyid ('tableName', {id: 1}); Получите это.Метод реализации третий (Thunkify, Thunkify-wrap)
Инкапсуляция также может быть завершена с использованием Thunkify. Thunkify-WRAP-это улучшенная версия Thunkify. Однако, согласно объяснению, этот метод может быть устранен в будущем развитии. Приблизительное использование следующее:
var genify = require ('thinkify-wrap'). genify; var db = genify ("mydbhelper"); ... var rows = gilld db.getbyid ('tableName', {id: 1}); Получите это.Метод реализации четыре (прямой метод)
Непосредственно преобразовать исходный код в форме обещания, см. Co-Mysql и тщательно изучите соответствующие знания обещания и завершите преобразование существующего кода. Код и описание следующие:
dbhelper.js
var config = require ('./ dbconfig'); var options = {'host': config.db_host, 'port': config.db_port, 'база данных': config.db_name, 'user': config.db_user, 'пароль': config.db_passwd} var mysql = require ('mysql'); mysql.createpool (options); // Внутренняя инкапсуляция mysql, выполнить функцию оператора sql execquery (sql, values, callback) {var errinfo; pool.getConnection (function (err, connection) {if (err) {errinfo = 'Исключение подключения базы данных db-get! Callback (null, Rows); } catch (err) {}} // вернуть форму функции обещания на внешний интерфейс exports.getbyId = function (tableName, id) {return new обещание (функция (Resolve, doject) {var values = {id: id}; var sql = 'select * from? } else {Resolve (Rows); Получите это.Код
Пожалуйста, обратитесь к разделу операции базы данных в этом проекте. Проект находится в непрерывной разработке, и из этого проекта взят пример примера базы данных.
https://github.com/zhoutk/koadmin.git