Node.js进阶基础技能—Koa基本使用
一、簡介
koa 是由 Express 原班人馬打造的,致力于成為一個更小、更富有表現(xiàn)力、更健壯的 Web 框架。使用 koa 編寫 web 應(yīng)用,通過組合不同的 generator,可以免除重復(fù)繁瑣的回調(diào)函數(shù)嵌套,并極大地提升錯誤處理的效率。koa 不在內(nèi)核方法中綁定任何中間件,它僅僅提供了一個輕量優(yōu)雅的函數(shù)庫,使得編寫 Web 應(yīng)用變得得心應(yīng)手。
二、安裝
Koa需要 node v7.6.0或更高版本來支持ES2015、異步方法
你可以安裝自己支持的node版本。
$ nvm install 7
$ npm i koa
$ node my-koa-app.js
三、Babel異步函數(shù)
在node < 7.6的版本中使用async 函數(shù), 我們推薦使用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');
為了解析和轉(zhuǎn)譯異步函數(shù),你應(yīng)該至少有transform-async-to-generator or transform-async-to-module-method這2個插件。例如,在你的.babelrc文件中,應(yīng)該有如下代碼
{
? "plugins": ["transform-async-to-generator"]
}
也可以使用env preset并設(shè)置"node": "current"來替代。
四、應(yīng)用程序
Koa 應(yīng)用程序是一個包含一組中間件函數(shù)的對象,它是按照類似堆棧的方式組織和執(zhí)行的。Koa 類似于你可能遇到過的許多其他中間件系統(tǒng),例如 Ruby 的 Rack ,Connect 等,然而,一個關(guān)鍵的設(shè)計點是在其低級中間件層中提供高級“語法糖”。這提高了互操作性,穩(wěn)健性,并使書寫中間件更加愉快。
這包括諸如內(nèi)容協(xié)商,緩存清理,代理支持和重定向等常見任務(wù)的方法。盡管提供了相當多的有用的方法 Koa 仍保持了一個很小的體積,因為沒有捆綁中間件。
必修的 hello world 應(yīng)用:
五、級聯(lián)
Koa 中間件以更傳統(tǒng)的方式級聯(lián),您可能習慣使用類似的工具 - 之前難以讓用戶友好地使用 node 的回調(diào)。然而,使用 async 功能,我們可以實現(xiàn) “真實” 的中間件。對比 Connect 的實現(xiàn),通過一系列功能直接傳遞控制,直到一個返回,Koa 調(diào)用“下游”,然后控制流回“上游”。
下面以 “Hello World” 的響應(yīng)作為示例,首先請求流通過 x-response-time 和 logging 中間件來請求何時開始,然后繼續(xù)移交控制給 response 中間件。當一個中間件調(diào)用 next() 則該函數(shù)暫停并將控制傳遞給定義的下一個中間件。當在下游沒有更多的中間件執(zhí)行后,堆棧將展開并且每個中間件恢復(fù)執(zhí)行其上游行為。
六、設(shè)置
應(yīng)用程序設(shè)置是 app 實例上的屬性,目前支持如下:
·app.env 默認是 NODE_ENV 或 "development"
·app.proxy 當真正的代理頭字段將被信任時
·app.subdomainOffset 對于要忽略的 .subdomains 偏移[2]
·app.context
app.context 是從其創(chuàng)建 ctx 的原型。您可以通過編輯 app.context 為 ctx 添加其他屬性。這對于將 ctx 添加到整個應(yīng)用程序中使用的屬性或方法非常有用,這可能會更加有效(不需要中間件)和/或 更簡單(更少的 require()),而更多地依賴于ctx,這可以被認為是一種反模式。
例如,要從 ctx 添加對數(shù)據(jù)庫的引用:
注意:ctx 上的許多屬性都是使用 getter ,setter 和 Object.defineProperty() 定義的。你只能通過在 app.context 上使用 Object.defineProperty() 來編輯這些屬性(不推薦)。查閱https://github.com/koajs/koa/issues/652.
安裝的應(yīng)用程序目前使用其父級的 ctx 和設(shè)置。因此,安裝的應(yīng)用程序只是一組中間件。
七、最后
Koa是基于Node.js的下一代web框架,由Express團隊打造,特點:優(yōu)雅、簡潔、靈活、體積小。幾乎所有功能都需要通過中間件實現(xiàn)。
總結(jié)
以上是生活随笔為你收集整理的Node.js进阶基础技能—Koa基本使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梅科尔工作室-梁嘉莹-鸿蒙笔记1
- 下一篇: 图像可视化——matplotlib绘图入