一、簡介
koa 是由 Express 原班人馬打造的,致力於成為一個更小、更富有表現力、更健壯的 Web 框架。使用 koa 編寫 web 應用,通過組合不同的 generator,可以免除重複繁瑣的回撥函式巢狀,並極大地提升錯誤處理的效率。koa 不在核心方法中繫結任何中介軟體,它僅僅提供了一個輕量優雅的函式庫,使得編寫 Web 應用變得得心應手。
二、安裝Koa需要 node v7.6.0或更高版本來支援ES2015、非同步方法
你可以安裝自己支援的node版本。
$ nvm install 7
$ npm i koa
$ node my-koa-app.js
二、Babel非同步函式在node < 7.6的版本中使用async 函式, 我們推薦使用babel's require hook.
require('babel-core/register');
// require the rest of the app that needs to be transpiled after the hook
const app = require('./app');
為了解析和轉譯非同步函式,你應該至少有transform-async-to-generator or transform-async-to-module-method這2個外掛。例如,在你的.babelrc檔案中,應該有如下程式碼
{
"plugins": ["transform-async-to-generator"]
}
也可以使用env preset並設定"node": "current"來替代.
三、應用程式Koa 應用程式是一個包含一組中介軟體函式的物件,它是按照類似堆疊的方式組織和執行的。 Koa 類似於你可能遇到過的許多其他中介軟體系統,例如 Ruby 的 Rack ,Connect 等,然而,一個關鍵的設計點是在其低階中介軟體層中提供高階“語法糖”。 這提高了互操作性,穩健性,並使書寫中介軟體更加愉快。
這包括諸如內容協商,快取清理,代理支援和重定向等常見任務的方法。 儘管提供了相當多的有用的方法 Koa 仍保持了一個很小的體積,因為沒有捆綁中介軟體。
必修的 hello world 應用:
四、級聯Koa 中介軟體以更傳統的方式級聯,您可能習慣使用類似的工具 - 之前難以讓使用者友好地使用 node 的回撥。然而,使用 async 功能,我們可以實現 “真實” 的中介軟體。對比 Connect 的實現,通過一系列功能直接傳遞控制,直到一個返回,Koa 呼叫“下游”,然後控制流回“上游”。
下面以 “Hello World” 的響應作為示例,首先請求流通過 x-response-time 和 logging 中介軟體來請求何時開始,然後繼續移交控制給 response 中介軟體。當一箇中間件呼叫 next() 則該函式暫停並將控制傳遞給定義的下一個中介軟體。當在下游沒有更多的中介軟體執行後,堆疊將展開並且每個中介軟體恢復執行其上游行為。
五、設定應用程式設定是 app 例項上的屬性,目前支援如下:
app.env 預設是 NODE_ENV 或 "development"
app.proxy 當真正的代理頭欄位將被信任時
app.subdomainOffset 對於要忽略的 .subdomains 偏移[2]
app.contextapp.context 是從其建立 ctx 的原型。您可以通過編輯 app.context 為 ctx 新增其他屬性。這對於將 ctx 新增到整個應用程式中使用的屬性或方法非常有用,這可能會更加有效(不需要中介軟體)和/或 更簡單(更少的 require()),而更多地依賴於ctx,這可以被認為是一種反模式。
例如,要從 ctx 新增對資料庫的引用:
注意:
ctx 上的許多屬性都是使用 getter ,setter 和 Object.defineProperty() 定義的。你只能通過在 app.context 上使用 Object.defineProperty() 來編輯這些屬性(不推薦)。查閱 https://github.com/koajs/koa/issues/652.
安裝的應用程式目前使用其父級的 ctx 和設定。 因此,安裝的應用程式只是一組中介軟體。
六、最後Koa是基於Node.js的下一代web框架,由Express團隊打造,特點:優雅、簡潔、靈活、體積小。幾乎所有功能都需要通過中介軟體實現。