成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

koa2 總體流程原理淺析(一) 之 koa 啟動服務(wù)器解析

fsmStudy / 3143人閱讀

摘要:啟動流程主要的啟動流程就是下面的步引入包實例化編寫中間件監(jiān)聽服務(wù)器引入包引入包其實就是引入的一個繼承于原生的類的類其中就包含了等原型方法實例化執(zhí)行,將等對象封裝在實例中編寫中間件首先判斷的類型,不是方法直接拋錯是生成器函數(shù)的話用封裝是函數(shù)

啟動流程
koa 主要的啟動流程就是下面的 4 步:引入 koa 包 => 實例化 koa => 編寫中間件 => 監(jiān)聽服務(wù)器
const koa = require("koa");

const app = new koa();

app.use(function 1(){})
app.use(function 2(){})
app.use(function 3(){})

app.listen(port,function(){})
引入 koa 包
引入 koa 包其實就是引入的一個 繼承于 node 原生的 events 類的 Application 類
module.exports = class Application extends Emitter {
  constructor() {
    super();

    this.proxy = false;
    this.middleware = [];
    this.subdomainOffset = 2;
    this.env = process.env.NODE_ENV || "development";
    this.context = Object.create(context);
    this.request = Object.create(request);
    this.response = Object.create(response);
  }

  listen(...args) {}
  
  toJSON() {}

  inspect() {}

  use(fn) {}

  callback() {}

  handleRequest(ctx, fnMiddleware) {}

  createContext(req, res) {}

  onerror(err) {}
};
其中就包含了 listen 、use 等原型方法
實例化 koa
執(zhí)行 constructor ,將 ctx、response、request 等對象封裝在 koa 實例中
編寫中間件
use(fn) {
    if (typeof fn !== "function") throw new TypeError("middleware must be a function!");
    if (isGeneratorFunction(fn)) {
      deprecate("Support for generators will be removed in v3. " +
                "See the documentation for examples of how to convert old middleware " +
                "https://github.com/koajs/koa/blob/master/docs/migration.md");
      fn = convert(fn);
    }
    debug("use %s", fn._name || fn.name || "-");
    this.middleware.push(fn);
    return this;
}

首先判斷 fn 的類型,不是方法直接拋錯

是生成器函數(shù)的話用 co 封裝

是 async 函數(shù)的話直接放入中間件數(shù)組中

測試了一下,如果是普通函數(shù)的話,1.X 版本會報錯,2.X 版本可以執(zhí)行,但是由于沒有 next,只能執(zhí)行第一個

use 的作用就是把中間件函數(shù)依次放入 ctx.middleware 中,等待請求到來的時候順序調(diào)用
監(jiān)聽服務(wù)器
  listen(...args) {
    debug("listen");
    const server = http.createServer(this.callback()); // 這里注冊了 node 的 request 事件
    return server.listen(...args);
  }
koa 的監(jiān)聽主要有兩個封裝:

封裝原生的 node sever 監(jiān)聽

封裝 koa.callback(),并且為這個服務(wù)器設(shè)置了 node 的 request 事件,這意味著當(dāng)每一個請求到來時就會執(zhí)行 koa.callback() 方法,這是極為關(guān)鍵的一步,是 koa 中間件原理的基礎(chǔ)

下回分解
下一章我們會講解中間件的原理
END

?
?

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94304.html

相關(guān)文章

  • koa2 總體流程原理淺析(二) 中間件原理

    摘要:任何一層報錯,都能用捕獲總結(jié)是一個非常輕量級的框架,只實現(xiàn)了中間件處理流程和對對象的封裝。其他的功能都由外部中間件提供。 koa 的中間件機制巧妙的運用了閉包和 async await 的特點,形成了一個洋蔥式的流程,和 JS 的事件流 (捕獲 -> target -> 冒泡) 相似 handleRequest(ctx, fnMiddleware) { const res ...

    zhoutk 評論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)雅、簡潔、表達(dá)力強、自由度...

    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)雅、簡潔、表達(dá)力強、自由度...

    liangzai_cool 評論0 收藏0
  • 淺析koa的洋蔥模型實現(xiàn)

    摘要:前言被認(rèn)為是第二代,它最大的特點就是獨特的中間件流程控制,是一個典型的洋蔥模型。這段代碼就很巧妙的實現(xiàn)了兩點將一路傳下去給中間件將中的下一個中間件作為未來的返回值這兩點也是洋蔥模型實現(xiàn)的核心。 前言 koa被認(rèn)為是第二代node web framework,它最大的特點就是獨特的中間件流程控制,是一個典型的洋蔥模型。koa和koa2中間件的思路是一樣的,但是實現(xiàn)方式有所區(qū)別,koa2在...

    dabai 評論0 收藏0

發(fā)表評論

0條評論

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