koa介紹

ctx.response. type = 'json' ;
app.use() 用來加載中間件
app. use (ctx => { ctx. body = 'Hello Koa' ; });
以"先進後出"(first-in-last-out)的順序執行。
  1. 最外層的中間件首先執行。
  2. 調用next函數,把執行權交給下一個中間件。
  3. ...
  4. 最內層的中間件最後執行。
  5. 執行結束後,把執行權交回上一層的中間件。
  6. ...
  7. 最外層的中間件收回執行權以後,執行next函數後面的代碼。
const one = ( ctx , next ) => { console . log ( '>> one' ); next (); console . log ( '<< one' ); } const two = ( ctx , next ) => {
console . log ( '>> two' ); next (); console . log ( '<< two' ); } const three = ( ctx , next ) => { console . log ( '>> three' ); next (); console . log ( '<< three' ); } app . use ( one ); app . use ( two ); app . use ( three );
有以下輸出。
>> one >> two >> three << three << two << one
上面都是 同步的中間件 ,異步的須要加async
const main = async function ( ctx , next ) { ctx . response . type = 'html' ; ctx . response . body = await fs . readFile ( './demos/template.html' , 'utf8' ); }; app . use ( main );
上面代碼中, fs.readFile 是一個異步操做,必須寫成 await fs.readFile() ,而後中間件必須寫成 async 函數。
上下文
請求
響應
async function doWork() { // 使用 async/await 的方式依次獲取兩個 JSON 文件 var result1 = await fetch('data1.json'); var result2 = await fetch('data2.json'); return { result1, result2 }; }
這個語法能夠理解爲:被 async 關鍵字標記的函數, 能夠對其使用 await 關鍵字來暫停函數的執行直到異步操做結束
async function indexStep1 ( ctx , next ) { //邏輯處理第一部分 await next (); } async function indexStep2 ( ctx , next ) { //邏輯處理第二部分 await next (); } async function indexStep3 ( ctx , next ) { //邏輯處理第三部分 await ctx . render ( 'index' ); } router . get ( '/index' , indexStep1 , indexStep2 , indexStep3 );

同時實現get和post
router.all
Create routes with multiple HTTP methods using  router.register() :
app.register( '/' , [ 'get' , 'post' ], function * (next) { // ... });
Create route for all methods using  router.all() :
app.all( '/' , function * (next) { // ... });
獲取參數
eventCenter?data1=leijh
var data = ctx.request.query.data || null;
相關文章
相關標籤/搜索