基於ES7開發,徹底使用Promise並配合async
來實現異步的node框架css
核心是對node的HTT模塊P進行了封裝,用多個async函數組成處理鏈,來不斷地接收HTTP請求(ctx對象)並處理。html
這拯救了無限嵌套回調和promise無限鏈式.then()的寫法node
Middleware:koa把不少async函數組成一條處理鏈,一個async函數就是一個middleware,函數中能夠本身處理一些事情,而後用ES7的await ->await next()
來調用下一個async函數,express
middleware順序很重要,若是一個middleware沒有調用await next()
,則處理鏈中斷,後續的middleware將再也不執行。數組
await只有一個限制,就是必須在async函數中調用promise
核心代碼:服務器
對於每個http請求,koa將調用咱們傳入的異步函數來處理:app
//一個async函數 async (ctx, next) => { await next(); // 設置response的Content-Type: ctx.response.type = 'text/html'; // 設置response的內容: ctx.response.body = '<h1>Hello, koa2!</h1>'; }
KOA-ROUTER框架
基本路由實現:koa
(注意:更多的時候不止須要返回靜態頁面,還須要根據不一樣的數據渲染頁面,這時候就須要用到nunjucks模板
配合nunjucks模板時,總體思路也是大同小異,controllers中把router跳轉換成用render()模板渲染的操做就能夠,固然模板渲染這個操做須要另寫一個middleware
)
2. controller.js 依次讀取(fs模塊)controllers中每一個js文件中的各個處理函數,push進路由, 當匹配到對應url時,controllers中對應的函數將被執行
(注意:配合nunjucks模板時,還須要在開發環境加一個處理靜態文件的middleware,以便在HTML中引入css/js等靜態文件。模擬服務器端處理靜態文件的功能)
3. app.js中執行controller.js
Koa-bodyparser: 用於解析原始request請求消息體,好比post請求發送表單,數據存在請求的body中,可是node與koa的request對象都沒有解析請求消息體的功能。
還能夠用於rest API的開發
注:REST請求是一種請求類型和響應類型均爲JSON的HTTP請求
廖雪峯老師rest的教程: https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014735914606943e2866257aa644b4bdfe01d26d29960b000
express實現異步只能經過層層回調,能夠配合co函數庫實現相似於koa的middleware