koa 學習筆記

首先解釋一下koa是什麼?

同當前煊赫一時的Express同樣,它是一款更年輕的web應用框架javascript

它和Express的異同?

Koa,是 Express 原班人馬基於 ES6 新特性從新開發的框架,主要基於co 中間件,框架自身不包含任何中間件,不少功能須要藉助第三方中間件解決,可是因爲其基於 ES6 generator 特性的異步流程控制,解決了 "callback hell" 和麻煩的錯誤處理問題。css

異步流程控制java

Express 採用 callback 來處理異步,Koa v1 採用 generator,Koa v2 採用 async/await。
下面分別對 js 當中 callback、promise、generator、async/await 這四種異步流程控制進行了對比,
generator 和 async/await 使用同步的寫法來處理異步,明顯好於 callback 和 promise,async/await 在語義化上又要比 generator 更強。node

錯誤處理
Express 使用 callback 捕獲異常,對於深層次的異常捕獲不了,
Koa 使用 try catch,能更好地解決異常捕獲。git

詳細訪問:
Node.js 框架對比之 Express VS Koaes6

 

一張圖更好的理解Express & koa 的設計思想web

Koa的思想express

Express的思想,就是把請求當成流,沿着中間件一層一層的過,每一層均可以對請求進行處理,最終處理完成的,返回給客戶端,npm

而Koa 的中間件以相似堆棧的方式流動,容許執行下游操做,而後過濾並操縱上游的響應。
它的執行流程是經過es6中的generator來實現的。generator函數能夠像打斷點同樣從函數某個地方跳出,以後還能夠再回來繼續執行。經過這個例子來理解:json

function* gen() {
console.log('begin');
//3.執行到yield會帶着後面的數據切出,就是執行這個函數,
yield anotherfunc;
//6.下次回來時候從這裏開始執行
console.log('end!');
}

var anotherfunc(){
console.log('this is another function!');
}
//1.執行gen函數,不會當即執行它內部的代碼,而是返回一個迭代器,
var g=gen();
//2.經過迭代器的next()方法,啓動迭代器,這裏就會進入gen()函數執行,
var another=g.next(); //'begin!'
//4.another是一個對象,其中value成員就是返回的anotherfunc函數
another.value(); //'this is another function!'
//5.再次調用next()方法,這裏能夠傳參數,能夠將參數切入(不理解能夠先去搞清generator函數)
g.next(); //'end!';

 

這實際上是koa1的實現方式,在koa2中會採用es6的async/await,async/await至關因而generator和yield的語法糖,

詳細瞭解請訪問:
深刻探析koa之中間件流程控制篇 

 

體驗koa:

koa的中文文檔

安裝Koa:

Koa須要支持ES2015和async function的node v7.6.0或更高版本。
1.你能夠選擇安裝最新版的node環境,(卸載重裝)
2.利用nvm(node的版本管理)安裝指定版本的node環境,nvm不要用命令行安裝,須要實際安裝

$ nvm install 7

初始化package.json

npm init -y

而且配置script選項爲:

"dev": "node koa2.js"

安裝依賴

npm i -S koa

新建一個koa2.js,加入官方給的model

const Koa = require('koa');
const app = new Koa();

// x-response-time

app.use(async (ctx, next) => {
const start = Date.now();
await next();
const ms = (Date.now() - start) * 1000;
ctx.set('X-Response-Time', `${ms}ms`);
});

// logger

app.use(async (ctx, next) => {
const start = Date.now();
await next();
const ms = (Date.now() - start) * 1000;
console.log(`${ctx.method} ${ctx.url} - ${ms}`);
});

// response

app.use(async ctx => {
ctx.body = 'Hello World';
});

app.listen(3000);

  

運行

npm run dev

打開瀏覽器,訪問localhost:3000,親切的hello world映入眼簾。

 

express有應用生成器,那koa固然也有啊,

仍是安裝:
必定要全局安裝(koa1.2和koa2都己經支持)

npm install koa-generator -g

koa2 生成一個test項目,切到test目錄並下載依賴:

koa2 test & cd test $ npm install

運行

npm start

訪問 http://localhost:3000

express和koa生成項目時視圖模板默認是用jade,若是要切換爲ejs,在生成項目時,添加一個參數,

koa2 -e test

奉上koa2生成器的參數

-h, --help 幫助

-V, --version 版本號-e, --ejs 添加ejs模板引擎支持(默認是jade) --hbs 添加hbs模板引擎支持(默認是hbs)-H, --hogan 添加hogan.js支持-c, --css <engine> 添加css樣式 支持 less sass styus css(默認是css) --git 添加 .gitignore-f, --force force on non-empty directory

相關文章
相關標籤/搜索