koa服務(wù)器搭建基礎(chǔ)

之前我一直使用rails搭建網(wǎng)站。rails與koa的基本理念很相似,都是基于中間件提供一層層的服務(wù)。所不同的是,rails有很多內(nèi)置的中間件,這使得開(kāi)發(fā)者只需要關(guān)注MVC模塊以及頁(yè)面路由。而Koa這相對(duì)靈活很多,除了nodejs提供的http模塊服務(wù),其它的中間件都需要自己添加。

如果對(duì)于網(wǎng)站開(kāi)發(fā)不熟練,往往會(huì)不知道該添加哪些中間件。這篇文章就結(jié)合流程圖講解一下開(kāi)發(fā)網(wǎng)站大致需要的中間件。

Screen Shot 2017-04-14 at 11.20.21.png

安全檢查

檢查request的header,只允許符合安全的請(qǐng)求通過(guò)。安全檢查最流行的庫(kù)是koa-helmet??梢酝ㄟ^(guò)koa-helmet做下面這些檢查:

  • clickjacking
  • 移除X-Powered-By
  • 限制只通過(guò)https
  • xss攻擊過(guò)濾
  • 偽造證書(shū)攻擊
    更多的檢查大家可以查看koa-helmet的文檔。

數(shù)據(jù)預(yù)處理

http模塊并不會(huì)解析傳過(guò)來(lái)的數(shù)據(jù)。像表格里的數(shù)據(jù),文件,json,xml都需要手動(dòng)處理。數(shù)據(jù)預(yù)處理模塊就是對(duì)這些數(shù)據(jù)進(jìn)行處理的過(guò)程。處理完之后,可以通過(guò)鍵值在ctx.request里讀取這些數(shù)據(jù)。比較流行的數(shù)據(jù)預(yù)處理模塊可以參見(jiàn)koa-bodyparser

靜態(tài)資源

某些資源可以直接通過(guò)靜態(tài)資源,這樣可以省去路由,控制器,等的開(kāi)銷(xiāo)??梢酝ㄟ^(guò)koa-static設(shè)置靜態(tài)資源路徑。當(dāng)路徑匹配時(shí),可以直接找到靜態(tài)資源。

路由

根據(jù)URL尋找對(duì)應(yīng)的控制器以及視圖。比較常見(jiàn)的中間件有(koa-route)[https://www.npmjs.com/package/koa-route], (koa-router)[https://www.npmjs.com/package/koa-router]

身份驗(yàn)證

進(jìn)行身份驗(yàn)證,并提供簡(jiǎn)單的API來(lái)確認(rèn)是否驗(yàn)證成功,log in以及l(fā)og out。這個(gè)模塊相對(duì)比較復(fù)雜,我也需要花更多時(shí)間來(lái)研究。用的比較多的有koa-passport, koa-jwt

業(yè)務(wù)邏輯與數(shù)據(jù)獲取

這個(gè)模塊是網(wǎng)站開(kāi)發(fā)者主要投入精力的地方。其具體實(shí)現(xiàn)隨網(wǎng)站的需求不同而變化。

視圖

選擇視圖模版。常見(jiàn)的模版有pug(jade), handlebars, hbs等。詳情請(qǐng)看koa-pug, [koa-handlebars](https://www.npmjs.com/package/koa-handlebars], koa-hbs。

緩存

通過(guò)設(shè)置etag來(lái)判斷內(nèi)容是否改變。若etag未變化,則返回304給客戶(hù)端。否則返回帶有內(nèi)容的回復(fù)。可以使用(koa-etag)[https://www.npmjs.com/package/koa-etag]與(koa-conditional-get)[https://www.npmjs.com/package/koa-conditional-get]來(lái)實(shí)現(xiàn)基于etag的緩存

壓縮

將最終的輸出打包。比較流行的打包庫(kù)為koa-compress 。

其他中間件

  1. logger
    koa-logger在請(qǐng)求來(lái)臨和返回時(shí)輸出在控制臺(tái)輸出簡(jiǎn)單的信息。

  2. error
    koa-error可以對(duì)服務(wù)器拋出的異常進(jìn)行捕捉,并設(shè)置模版進(jìn)行渲染

  3. session
    koa-session在服務(wù)器端設(shè)置網(wǎng)站的session

參考資料

  1. koajs github wiki
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 框架提出的背景 ES6/7帶來(lái)的變革 自ES6確定和ES7中async/await開(kāi)始普及,Node的發(fā)展變得更加...
    宮若石閱讀 8,706評(píng)論 1 14
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評(píng)論 19 139
  • 1.簡(jiǎn)書(shū) koa是由Express原班人馬打造,致力于成為一個(gè)更小、更富有表現(xiàn)力、更健壯的Web框架。使用koa編...
    不去解釋閱讀 2,788評(píng)論 0 11
  • 從那天起,我開(kāi)始失眠 你控制了誰(shuí)的笑聲,你就控制了他的人生。
    先生說(shuō)閱讀 252評(píng)論 0 3
  • 父親節(jié)父親節(jié)到了,談?wù)劯赣H,人人生而有父,孫悟空之類(lèi)的另當(dāng)別論。無(wú)論是否還在這個(gè)世界上,他都會(huì)活在每個(gè)人的心中。這...
    石川河女神閱讀 240評(píng)論 0 0

友情鏈接更多精彩內(nèi)容