国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

koa源碼解析

hsluoyz / 2238人閱讀

摘要:用法回顧執(zhí)行順序每當(dāng)執(zhí)行時,執(zhí)行下一個中間件,執(zhí)行到最后一個中間件后開始往回執(zhí)行源碼解析源碼執(zhí)行步驟使用方法即將進中的數(shù)組中方法調(diào)用的和方法來創(chuàng)建服務(wù),的回掉執(zhí)行下面的操作回掉首先執(zhí)行方法將組合成一個對象來執(zhí)行,這個對象即可完成中

用法回顧
const Koa = require("koa");
const app = new Koa();

app.use(async (ctx, next) => {
  fn1();
  await next();
  fn2();
});

app.use(async (ctx, next) => {
  fn3();
  await next();
  fn4()
});

app.use(async (ctx, next) => {
  fn5();
  await next();
  fn6()
});

app.listen(3000);

執(zhí)行順序 fn1 -> fn3 -> fn5 -> fn6 -> fn4 -> fn2
每當(dāng)執(zhí)行next時,執(zhí)行下一個中間件,執(zhí)行到最后一個中間件后開始往回執(zhí)行

源碼解析 源碼執(zhí)行步驟

使用use方法即將middleware push 進koa中的this.middleware數(shù)組中

listen方法調(diào)用node的http.createServer和server.listen方法來創(chuàng)建服務(wù),createServer的回掉執(zhí)行下面的操作

回掉首先執(zhí)行compose(this.middleware)方法將middleware組合成一個promise對象來執(zhí)行,這個promise對象即可完成中間件級聯(lián)的操作

將回掉傳出的值req和res用于創(chuàng)建一個context對象,里面包含了request對象和response對象,這些對象提供了許多后臺開發(fā)需要的參數(shù)和方法

執(zhí)行中間件

得到結(jié)果給respond方法格式化數(shù)據(jù)

或者捕獲異常給onerror方法處理異常

compose

koa源碼最重要的部分,如何實現(xiàn)中間件級聯(lián),以下是compose方法的源碼(為方便觀看,部分進行了ES6處理)

function compose (middleware) {
  if (!Array.isArray(middleware)) throw new TypeError("Middleware stack must be an array!")
  for (const fn of middleware) {
    if (typeof fn !== "function") throw new TypeError("Middleware must be composed of functions!")
  }

  return function (context, next) {
    // last called middleware #
    let index = -1
    return dispatch(0)
    function dispatch (i) {
      if (i <= index) return Promise.reject(new Error("next() called multiple times"))
      index = i
      let fn = middleware[i]
      if (i === middleware.length) fn = next // next = undefined
      if (!fn) return Promise.resolve() // 當(dāng)運行到最后一個middleware時結(jié)束
      try {
        return Promise.resolve(
          fn(context, next = () => dispatch(i + 1))
        )
      } catch (err) {
        return Promise.reject(err)
      }
    }
  }
}

compose方法使用遞歸的方式遍歷每一個middleware

遍歷時將下一個middleware當(dāng)作next傳遞給當(dāng)前的middleware

更多文章 yjy5264.github.io

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/94172.html

相關(guān)文章

  • Koa 系列 —— Koa 中間件機制解析

    摘要:中異步處理在中使用的是,在中使用的是,我們本次采用來處理異步。函數(shù)參數(shù)為的數(shù)組,數(shù)組成員是通過方法添加的中間件。小結(jié)從最開始的編寫中間件,到現(xiàn)在閱讀函數(shù)源碼,中間件機制并不復(fù)雜,了解之后,我們可以運用編寫更合適的中間件,構(gòu)建自己的應(yīng)用。 上一篇講了如何編寫屬于自己的 Koa 中間件,本篇將根據(jù)原理實現(xiàn)一個簡單的中間件處理函數(shù),并對 Koa 中間件處理函數(shù) compose 函數(shù)進行源碼解...

    blastz 評論0 收藏0
  • Koa源碼解析

    摘要:若大于時,將賦予,此時與相等。通過源碼分析,我們知道了的核心思想建立于中間件機制,它是一個設(shè)計十分簡潔巧妙的框架,擴展性極強,就是建立于之上的上層框架。 Koa是一款設(shè)計優(yōu)雅的輕量級Node.js框架,它主要提供了一套巧妙的中間件機制與簡練的API封裝,因此源碼閱讀起來也十分輕松,不論你從事前端或是后端研發(fā),相信都會有所收獲。 目錄結(jié)構(gòu) 首先將源碼下載到本地,可以看到Koa的源碼只包含...

    CarterLi 評論0 收藏0
  • KOA2框架原理解析和實現(xiàn)

    摘要:實現(xiàn)的四大模塊上文簡述了源碼的大體框架結(jié)構(gòu),接下來我們來實現(xiàn)一個的框架,筆者認(rèn)為理解和實現(xiàn)一個框架需要實現(xiàn)四個大模塊,分別是封裝創(chuàng)建類構(gòu)造函數(shù)構(gòu)造對象中間件機制和剝洋蔥模型的實現(xiàn)錯誤捕獲和錯誤處理下面我們就逐一分析和實現(xiàn)。 什么是koa框架? ? ? ? ?koa是一個基于node實現(xiàn)的一個新的web框架,它是由express框架的原班人馬打造的。它的特點是優(yōu)雅、簡潔、表達力強、自由度...

    tracymac7 評論0 收藏0
  • KOA2框架原理解析和實現(xiàn)

    摘要:實現(xiàn)的四大模塊上文簡述了源碼的大體框架結(jié)構(gòu),接下來我們來實現(xiàn)一個的框架,筆者認(rèn)為理解和實現(xiàn)一個框架需要實現(xiàn)四個大模塊,分別是封裝創(chuàng)建類構(gòu)造函數(shù)構(gòu)造對象中間件機制和剝洋蔥模型的實現(xiàn)錯誤捕獲和錯誤處理下面我們就逐一分析和實現(xiàn)。 什么是koa框架? ? ? ? ?koa是一個基于node實現(xiàn)的一個新的web框架,它是由express框架的原班人馬打造的。它的特點是優(yōu)雅、簡潔、表達力強、自由度...

    liangzai_cool 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<