以前我一直使用rails搭建網站。rails與koa的基本理念很類似,都是基於中間件提供一層層的服務。所不一樣的是,rails有不少內置的中間件,這使得開發者只須要關注MVC模塊以及頁面路由。而Koa這相對靈活不少,除了nodejs提供的http模塊服務,其它的中間件都須要本身添加。node
若是對於網站開發不熟練,每每會不知道該添加哪些中間件。這篇文章就結合流程圖講解一下開發網站大體須要的中間件。git
檢查request的header,只容許符合安全的請求經過。安全檢查最流行的庫是koa-helmet。能夠經過koa-helmet作下面這些檢查:github
http模塊並不會解析傳過來的數據。像表格裏的數據,文件,json,xml都須要手動處理。數據預處理模塊就是對這些數據進行處理的過程。處理完以後,能夠經過鍵值在ctx.request裏讀取這些數據。比較流行的數據預處理模塊能夠參見koa-bodyparsernpm
某些資源能夠直接經過靜態資源,這樣能夠省去路由,控制器,等的開銷。能夠經過koa-static設置靜態資源路徑。當路徑匹配時,能夠直接找到靜態資源。json
根據URL尋找對應的控制器以及視圖。比較常見的中間件有(koa-route)[https://www.npmjs.com/package/koa-route], (koa-router)[https://www.npmjs.com/package/koa-router]緩存
進行身份驗證,並提供簡單的API來確認是否驗證成功,log in以及log out。這個模塊相對比較複雜,我也須要花更多時間來研究。用的比較多的有koa-passport, koa-jwt安全
這個模塊是網站開發者主要投入精力的地方。其具體實現隨網站的需求不一樣而變化。服務器
選擇視圖模版。常見的模版有pug(jade), handlebars, hbs等。詳情請看koa-pug, [koa-handlebars](https://www.npmjs.com/package/koa-handlebars], koa-hbs。session
經過設置etag來判斷內容是否改變。若etag未變化,則返回304給客戶端。不然返回帶有內容的回覆。可使用(koa-etag)[https://www.npmjs.com/package/koa-etag]與(koa-conditional-get)[https://www.npmjs.com/package/koa-conditional-get]來實現基於etag的緩存koa
將最終的輸出打包。比較流行的打包庫爲koa-compress 。
logger
koa-logger在請求來臨和返回時輸出在控制檯輸出簡單的信息。
error
koa-error能夠對服務器拋出的異常進行捕捉,並設置模版進行渲染
session
koa-session在服務器端設置網站的session
參考資料