response
koa在context上直接拓展了原生req、res的屬性,同時也在request、response上拓展了原生req、res的屬性.
同時也給context以及request、response拓展url、heanders等屬性,方便使用。但是寫法比較有趣:
//當訪問的時候,我們定義了get方法,相當於簡寫defineproperty,返回自身的req屬性的url屬性
let request =
}console.log(context.request.url)
複製**
//response同理,不過我發現只要自定義get、set自己就得哪乙個變數暫時的儲存set的值,以便在get的時候返回去
let response = ,
set body(value)
}response.body = 123;
console.log(context.response.body)
複製**
//context其實也是一樣的,只不過用api的形式定義的get set
let context = ;
function
definegetter(target,property) );
}function
definesetter(target,property) )
}definegetter('request','path');
definegetter('response','body');
// ctx.body = ctx.response.body;
definesetter('response','body')
context.body = 123;
console.log(context.body)
console.log(context.path)
複製**
console.log(1);
await next(); // 呼叫這個函式的時候 就是當前第二個函式不一定執行完了
console.log(2);
}); console.log(3);
await log()
await next();
console.log(4);
})//我們在執行中介軟體函式的時候,把await next給替換成了await () => dispatch(index+1)
//實際上就是await () => promise.resolve(middlewares[index]())
//或者await () => if(index === middlewares.length) return promise.resolve();
compose(ctx, middlewares)
return dispatch(0)
}複製**
tips: promise.resolve如果裡面傳的是個promise,會等待裡面的promise成功或者失敗了以後才會執行它自己的then
Koa原始碼分析
上篇文章寫了如何閱讀koa的原始碼,粗略的過了一下koa的原始碼,但是作為乙個沒有得出乙個具體的結論,中介軟體的執行原理也不清楚,這裡我們再仔細的過一遍koa的原始碼.首先還是先過一遍例子 const koa require koa ctx.body hello world 複製 起乙個web服務,...
Koa原始碼分析
先看看這個極簡的啟動 const koa require koa response ctx.body hello koa 我們在koa原始碼資料夾下建立index.js檔案,將上面的 寫入,並將require koa 換成require const koa require debugger ctx....
koa 原始碼分析
koa的用法,這裡就不在列舉了。我覺得koa主要功能主要是下面幾個方面 1 提供了中介軟體機制 2 封裝了request response,context物件 3 使用了yield,提供了便利的流程控制,使非同步程式設計更優雅 4 便捷的異常處理,使用try catch就可以捕獲程式中的異常,不需要...