溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

koa中間件主要知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-11-12 15:56:16 來源:億速云 閱讀:120 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“koa中間件主要知識(shí)點(diǎn)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

  koa中間件中為什么必須且只能調(diào)用一次next函數(shù),可以看到如果不調(diào)用next,就不會(huì)觸發(fā)dispatch(i+1),下一個(gè)中間件就沒辦法觸發(fā),造成假死狀態(tài)最終請(qǐng)求超時(shí)。

  koa中間件主要涉及到Promise幾個(gè)知識(shí)點(diǎn):

  async函數(shù)返回的是一個(gè)Promise對(duì)象【所以的中間件都會(huì)返回一個(gè)promise對(duì)象】

  async函數(shù)內(nèi)部遇到await調(diào)用時(shí)會(huì)暫停執(zhí)行await函數(shù),等待返回結(jié)果后繼續(xù)向下執(zhí)行

  async函數(shù)內(nèi)部發(fā)生錯(cuò)誤會(huì)導(dǎo)致返回的Promise變?yōu)閞eject狀態(tài)

  現(xiàn)在我們?cè)诨仡欀疤岢龅膸讉€(gè)問題:

  next()調(diào)用為什么需要加await

  這也是洋蔥圈調(diào)用機(jī)制的核心,當(dāng)執(zhí)行到awaitnext(),會(huì)執(zhí)行next()【調(diào)用下一個(gè)中間件】等待返回結(jié)果,在接著向下執(zhí)行

  koa中間件如何進(jìn)行Context提供

  目標(biāo):封裝Context,提供request、response的便捷操作方式

  //1、定義KoaRequest、KoaResponse、KoaContext

  interfaceKoaContext{

  request?:KoaRequest;

  response?:KoaResponse;

  body:String|null;

  }

  constcontext:KoaContext={

  getbody(){

  returnthis.response!.body;

  },

  setbody(body){

  this.response!.body=body;

  }

  };

  functioncomposeMiddleware(middlewares:middlewareFn[]){

  return(context:KoaContext)=>{

  letstart=-1;

  functiondispatch(i:number){

  //..省略其他代碼..

  //2、所有的中間件接受context參數(shù)

  middleware(context,()=>{

  returndispatch(i+1);

  });

  }

  returndispatch(0);

  };

  }

“koa中間件主要知識(shí)點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

koa
AI