Original Express 팀이 만든 KOA는 작고 강력하며 표현력이 뛰어난 웹 프레임 워크가되기 위해 노력하고 있습니다. KOA를 사용하여 다른 발전기를 결합하여 웹 애플리케이션을 작성하면 중복 및 번거로운 콜백 기능 중첩을 제거하고 일반적인 오류 처리의 효율성을 크게 향상시킬 수 있습니다. KOA는 커널 방법으로 미들웨어를 바인딩하지 않으며 가볍고 우아한 기능 라이브러리 만 제공하여 웹 응용 프로그램 작성을 쉽게 사용할 수 있습니다.
KOA를 설치하십시오
KOA는 생성기를 지원하는 노드 환경에 따라 달라집니다. 즉, 노드 버전은 0.11.9 이상이어야합니다. 그렇지 않으면 실행되지 않습니다.
NPM 사용 :
$ npm 설치 KOA
또는 전 세계적으로 설치를 선택하십시오.
$ npm install -g koa
예
다음은 KOA의 간단한 예입니다.
var koa = require ( 'koa'); var app = koa (); // loggerapp.use (function *(다음) {var start = new 날짜; 수율 next; var ms = new 날짜 - 시작; console.log ( ' %s %s- %s', this.method, this.url, ms); // muse (this *() hello (body = hone) World ';}); App.Listen (3000);일반 함수와 달리 생성기 함수는 함수*로 선언됩니다. 이 키워드 지원 수익률로 선언 된 기능. 수율의 사용과 중요성은 나중에 논의 될 것입니다.
KOA를 실행하십시오
KOA를 실행할 때는 -Harmony 모드에서 실행해야합니다. 편의를 위해 노드를 기본적으로 시작하기위한 별칭으로 노드로 설정할 수 있습니다.
별칭 노드 = '노드 -harmony'
이렇게하면 관련 JS를 실행할 때 직접 사용할 수 있습니다.
계단식
이것은 비교적 추상적 인 개념입니다. KOA 미들웨어는 매우 전통적인 방식으로 계단식을하고 있는데, 이는 계단식이라고합니다.
이전 노드 개발에서 콜백을 자주 사용하는 것은 복잡한 코드 로직을 표시하는 데 편리하지 않았습니다. KOA에서는 진정으로 표현력있는 미들웨어를 쓸 수 있습니다. Middleware를 구현하는 Connect의 방법과 비교하여 KOA의 접근 방식은 프로그램이 끝날 때까지 미들웨어 후 Middleware에 제어를 넘겨주는 것이 아닙니다. KOA는 종이 클립처럼 코드를 실행합니다. 사용자가 미들웨어를 통과하도록 요청하면 요청 (다운 스트림)을 충족하는 다음 경로로 전달됩니다. Next Next가 다음 미들웨어를 캡처 할 수 없으면 코드 (업스트림)를 계속 실행하기 위해 역 순서로 돌아갑니다.
다음 예제는이 특수 방법을 사용하여 작성된 Hello World 예제를 보여줍니다. 처음에는 사용자의 요청이 Xpronse-Time Middleware와 로깅 미들웨어를 통과합니다. 이 두 중간 전쟁은 몇 가지 요청 세부 정보를 기록한 다음 한 번 응답 미들웨어를 "통과"하고 마지막으로 요청을 종료하고 "Hello World"로 돌아갑니다.
프로그램이 다음에 수율로 실행되면 코드 흐름은 나머지 미들웨어 코드의 실행을 일시 중지하고 다음 정의 된 미들웨어로 전환하여 코드를 실행합니다. 이러한 스위칭 제어 방식은 다운 스트림이라고합니다. 다운 스트림을 실행하기위한 다음 미들웨어가 없으면 코드는 역 순서로 실행됩니다.
var koa = require ( 'koa'); var app = koa (); // x response-timeapp.use (function *(next) {// (1) var var start = new 날짜를 입력하고 다음 번에 다시 입력하고 xpronse-time middleware를 다시 입력 하고이 미들웨어 ms = 새로운 날짜를 통해 "여행"(the + 'ms')을 통해 "이동"; this.body}); // loggerapp.use (function *(next) {// (2) Logger Middleware var var start = new 날짜를 입력하고 다음 번에 다시 입력하고 Logger Middleware를 다시 입력 하고이 미들웨어를 통해 "이동"시간을 기록 할 때 시간을 기록합니다. responseapp.use (function *() {// (3) 응답 미들웨어를 입력하고 조건을 충족하는 다음 미들웨어가 캡처되지 않아 this.body = 'hello world';}); app.listen (3000);위의 예제 코드에서, 미들웨어는 주석에 실행되는 순서로 표시되었습니다. 이 예제를 직접 실행하고 각 링크의 출력 및 시간 소모를 인쇄하고 기록 할 수도 있습니다.
.middleware1 {// (1) 몇 가지 작업 .middleware2 {// (2) 다른 작업을 수행합니다 .Middleware3 {// (3) 다음 수익률이 없습니다! // this.body = 'hello world'} // (4) 나중에 다른 일을합니다} // (5) 가장 마지막으로 일을하고 반환}}미들웨어의 실행 순서는 위의 의사 코드에 표시됩니다. 루비가 블록을 실행할 때 수율이 약간 비슷합니까? 어쩌면 이것은 KOA의 작동 방식을 더 잘 이해하는 데 도움이 될 것입니다.
KOA 액세스 MySQL 데이터베이스 작업에 액세스합니다
구현 방법 1 (co-mysql)
MySQL 라이브러리는 콜백 형태로 구현되며 KOA 미들웨어에는 약속의 형태가 필요합니다. 검색 후 Co-MySQL 및 MySQL-Co를 발견했습니다. 두 라이브러리는 비슷한 아이디어를 가지고 있습니다. MySQL-Co는 더 높은 캡슐화 정도를 가지며 더 빠른 MySQL2를 사용하는 반면 Co-MySQL은 더 간단하여 MySQL.Query를 약속의 형태로 캡슐화합니다. 다음은 co-mysql을 기반으로하는 쓰기 방법입니다
var rapper = require ( 'co-mysql'), mysql = require ( 'mysql'); var 옵션 = {호스트 : '로컬 호스트', 포트 : 3306, 데이터베이스 : '테스트', 사용자 : '루트', '루트 root'}; var pool = mysql.createpool (옵션); givers this.render ( 'index', {title : rows [0] .fieldName}); ...}) ();메소드 2 (Promisify-Node) 구현
Promisify-Node 라이브러리를 찾으면 라이브러리를 전체적으로 약속 형태로 변환 할 수 있습니다. 샘플 코드는 다음과 같습니다.
var promisify = require ( "promisify-node"); var db = promisify ( "mydbhelper"); ... var rows = aptire db.getByid ( 'tablename', {id : 1}); givers this.render ( 'index', {title : rows [0] .fieldName}); ...구현 방법 3 (Thunkify, Thunkify-Wrap)
Thunkify를 사용하여 캡슐화를 완료 할 수도 있습니다. Thunkify-Wrap은 강화 된 버전의 Thunkify입니다. 그러나 설명에 따르면이 방법은 향후 개발에서 제거 될 수 있습니다. 대략적인 사용은 다음과 같습니다.
var angenify = require ( 'thunkify-wrap'). genify; var db = genify ( "mydbhelper"); ... var rows = aptire db.getByid ( 'tablename', {id : 1}); givers this.render ( 'index', {title : rows [0] .fieldName}); ...구현 방법 4 (직접 방법)
Express의 원래 코드를 약속 형식으로 직접 변환하고 Co-MysQL을 참조하고 약속에 대한 관련 지식을 신중하게 배우고 기존 코드의 변환을 완료하십시오. 코드 및 설명은 다음과 같습니다.
dbhelper.js
var config = require ( './ dbconfig'); var 옵션 = { 'host': config.db_host, 'port': config.db_port, 'database': config.db_name, 'user': config.db_user, 'password': config.db_passwd} var mysql = requess ( 'mysql'); mysql.createpool (옵션); // mysql의 내부 캡슐화, 실행 SQL 문 함수 execQuery (SQL, 값, 콜백) {var errinfo; pool.getConnection (function (err, connection) {if (err) {errinfo = 'db-get database connection exception! 콜백 (null, 행);}; } catch (err) {}} // 약속 함수 양식을 외부 인터페이스에 반환합니다. getById = function (tableName, id) {return new Promise (function (resolve, deject) {var values = {vals = {id : id}; var sql = 'select * from?'; execquery (sql, [tablemen, value], eRR (err) {row, row) } else {resolve (rows); givers this.render ( 'index', {title : rows [0] .fieldName}); ...암호
이 프로젝트의 데이터베이스 작동 섹션을 참조하십시오. 프로젝트는 지속적인 개발 중이며 데이터베이스 예제 섹션은이 프로젝트에서 가져옵니다.
https://github.com/zhoutk/koadmin.git