koa 學習筆記

2022-09-01 09:36:10 字數 2957 閱讀 2397

同當前炙手可熱的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() 

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!';

這其實是koa1的實現方式,在koa2中會採用es6的async/await,async/await相當於是generator和yield的語法糖,

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');

// 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';

});

執行npm run dev

開啟瀏覽器,訪問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...