同當前炙手可熱的express一樣,它是一款更年輕的web應用框架
koa,是 express 原班人馬基於 es6 新特性重新開發的框架,主要基於co 中介軟體,框架自身不包含任何中介軟體,很多功能需要借助第三方中介軟體解決,但是由於其基於 es6 generator 特性的非同步流程控制,解決了 "callback hell" 和麻煩的錯誤處理問題。
非同步流程控制
express 採用 callback 來處理非同步,koa v1 採用 generator,koa v2 採用 async/await。
下面分別對 js 當中 callback、promise、generator、async/await 這四種非同步流程控制進行了對比,
generator 和 async/await 使用同步的寫法來處理非同步,明顯好於 callback 和 promise,async/await 在語義化上又要比 generator 更強。
錯誤處理
express 使用 callback 捕獲異常,對於深層次的異常捕獲不了,
koa 使用 try catch,能更好地解決異常捕獲。
詳細訪問:
node.js 框架對比之 express vs koa
一張圖更好的理解express & koa 的設計思想
koa的思想
express的思想,就是把請求當成流,沿著中介軟體一層一層的過,每一層都可以對請求進行處理,最終處理完成的,返回給客戶端,
而koa 的中介軟體以類似堆疊的方式流動,允許執行下游操作,然後過濾並操縱上游的響應。
它的執行流程是通過es6中的generator來實現的。generator函式可以像打斷點一樣從函式某個地方跳出,之後還可以再回來繼續執行。通過這個例子來理解:
function* gen()這其實是koa1的實現方式,在koa2中會採用es6的async/await,async/await相當於是generator和yield的語法糖,var anotherfunc()
//1.執行gen函式,不會立即執行它內部的**,而是返回乙個迭代器,
var g=gen();
//2.通過迭代器的next()方法,啟動迭代器,這裡就會進入gen()函式執行,
var another=g.next(); //'begin!'
是乙個物件,其中value成員就是返回的anotherfunc函式
another.value(); //'this is another function!'
//5.再次呼叫next()方法,這裡可以傳引數,可以將引數切入(不理解可以先去搞清generator函式)
g.next(); //'end!';
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');執行npm run dev// x-response-time
const start = date.now();
await next();
const ms = (date.now() - start) * 1000;
ctx.set('x-response-time', `$ms`);
});// logger
const start = date.now();
await next();
const ms = (date.now() - start) * 1000;
console.log(`$ $ - $`);
});// response
ctx.body = 'hello world';
});
開啟瀏覽器,訪問localhost:3000,親切的hello world映入眼簾。
express有應用生成器,那koa當然也有啊,
還是安裝:
一定要全域性安裝(koa1.2和koa2都己經支援)
npm install koa-generator -g
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 新增css樣式 支援 less sass styus css(預設是css)
--git 新增 .gitignore
-f, --force force on non-empty directory
koa學習筆記
const koa require koa 複製 context物件表示一次會話的上下文,包含response和request.可以控制返回給使用者的內容,例如 const koa require koa const main ctx 複製 koa預設返回的是text plain。如果想要返回其他型...
Koa學習筆記 http請求處理
1.簡單處理http 中介軟體處理請求 router.js async function handlereq ctx,next module.exports 詳細request內包含的屬性可檢視 koa2 context.request 2.get請求 3.post請求 queryrequest.j...
開始學習koa
對koa已經躍躍欲試很久,恰遇koa2最近正式發布,今天嘗試著倒騰一番。所以自己對koa的學習算是從2.x開始,由於文件資源還不完全,準備踩著前輩們的肩膀,慢慢入坑。與大部分程式設計師同胞一樣樣的習慣,寫一發hello world慰藉自己孤寂的心靈。const koa require koa ctx...