KOA2 筆記

KOA2

基於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

  1. controllers 中編寫每一個請求對應的處理函數,能夠在函數中初始化URL數據並用router實現跳轉操做,而後暴露這些controllers,固然每一個處理函數都是一個async函數

           (注意:更多的時候不止須要返回靜態頁面,還須要根據不一樣的數據渲染頁面,這時候就須要用到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

相關文章
相關標籤/搜索