摘要:啟動流程主要的啟動流程就是下面的步引入包實例化編寫中間件監聽服務器引入包引入包其實就是引入的一個繼承于原生的類的類其中就包含了等原型方法實例化執行,將等對象封裝在實例中編寫中間件首先判斷的類型,不是方法直接拋錯是生成器函數的話用封裝是函數
啟動流程
koa 主要的啟動流程就是下面的 4 步:引入 koa 包 => 實例化 koa => 編寫中間件 => 監聽服務器
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
執行 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 的類型,不是方法直接拋錯
是生成器函數的話用 co 封裝
是 async 函數的話直接放入中間件數組中
測試了一下,如果是普通函數的話,1.X 版本會報錯,2.X 版本可以執行,但是由于沒有 next,只能執行第一個
use 的作用就是把中間件函數依次放入 ctx.middleware 中,等待請求到來的時候順序調用監聽服務器
listen(...args) { debug("listen"); const server = http.createServer(this.callback()); // 這里注冊了 node 的 request 事件 return server.listen(...args); }
koa 的監聽主要有兩個封裝:
封裝原生的 node sever 監聽
封裝 koa.callback(),并且為這個服務器設置了 node 的 request 事件,這意味著當每一個請求到來時就會執行 koa.callback() 方法,這是極為關鍵的一步,是 koa 中間件原理的基礎
下回分解下一章我們會講解中間件的原理END
?
?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94304.html
摘要:任何一層報錯,都能用捕獲總結是一個非常輕量級的框架,只實現了中間件處理流程和對對象的封裝。其他的功能都由外部中間件提供。 koa 的中間件機制巧妙的運用了閉包和 async await 的特點,形成了一個洋蔥式的流程,和 JS 的事件流 (捕獲 -> target -> 冒泡) 相似 handleRequest(ctx, fnMiddleware) { const res ...
摘要:實現的四大模塊上文簡述了源碼的大體框架結構,接下來我們來實現一個的框架,筆者認為理解和實現一個框架需要實現四個大模塊,分別是封裝創建類構造函數構造對象中間件機制和剝洋蔥模型的實現錯誤捕獲和錯誤處理下面我們就逐一分析和實現。 什么是koa框架? ? ? ? ?koa是一個基于node實現的一個新的web框架,它是由express框架的原班人馬打造的。它的特點是優雅、簡潔、表達力強、自由度...
摘要:實現的四大模塊上文簡述了源碼的大體框架結構,接下來我們來實現一個的框架,筆者認為理解和實現一個框架需要實現四個大模塊,分別是封裝創建類構造函數構造對象中間件機制和剝洋蔥模型的實現錯誤捕獲和錯誤處理下面我們就逐一分析和實現。 什么是koa框架? ? ? ? ?koa是一個基于node實現的一個新的web框架,它是由express框架的原班人馬打造的。它的特點是優雅、簡潔、表達力強、自由度...
摘要:前言被認為是第二代,它最大的特點就是獨特的中間件流程控制,是一個典型的洋蔥模型。這段代碼就很巧妙的實現了兩點將一路傳下去給中間件將中的下一個中間件作為未來的返回值這兩點也是洋蔥模型實現的核心。 前言 koa被認為是第二代node web framework,它最大的特點就是獨特的中間件流程控制,是一個典型的洋蔥模型。koa和koa2中間件的思路是一樣的,但是實現方式有所區別,koa2在...
閱讀 3323·2021-11-25 09:43
閱讀 3008·2021-10-15 09:43
閱讀 1965·2021-09-08 09:36
閱讀 2918·2019-08-30 15:56
閱讀 742·2019-08-30 15:54
閱讀 2684·2019-08-30 15:54
閱讀 2973·2019-08-30 11:26
閱讀 1237·2019-08-29 17:27