日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

玩轉(zhuǎn)Koa之koa-router原理解析( 三 )


1、allowedMethods()

玩轉(zhuǎn)Koa之koa-router原理解析


allowedMethods()中間件主要用于處理options請求 , 響應(yīng)405和501狀態(tài) 。上述代碼中的ctx.matched中保存的正是前面matched對象中的path(在routes方法中設(shè)置 , 后面會提到 。) , 在matched對象中的path數(shù)組不為空的前提條件下:
服務(wù)器不支持當(dāng)前請求方法 , 返回501狀態(tài)碼;
當(dāng)前請求方法為OPTIONS , 返回200狀態(tài)碼;
path中的layer不支持該方法 , 返回405狀態(tài);
對于上述三種情況 , 服務(wù)器都會設(shè)置Allow響應(yīng)頭 , 返回該路由路徑上支持的請求方法 。
2、routes()
玩轉(zhuǎn)Koa之koa-router原理解析


routes()中間件主要實現(xiàn)了四大功能 。
將matched對象的path屬性掛載在ctx.matched上 , 提供給后續(xù)的allowedMethods中間件使用 。(見代碼中的【1】)
將返回的dispatch函數(shù)設(shè)置router屬性 , 以便在前面提到的Router.prototype.use方法中區(qū)別路由級別中間件和嵌套路由 。(見代碼中的【2】)
插入一個新的路由前置處理中間件 , 將layer解析出來的params對象、路由別名以及捕獲數(shù)組掛載在ctx上下文中 , 這種操作同理Koa在處理請求之前先構(gòu)建context對象 。(見代碼中的【3】)
而對于路由匹配到眾多l(xiāng)ayer , koa-router通過koa-compose進(jìn)行處理 , 這和koa對于中間件處理的方式一樣的 , 所以koa-router完全就是一個小型洋蔥模型 。
七、總結(jié)
koa-router雖然是koa的一個中間件 , 但是其內(nèi)部也包含眾多的中間件 , 這些中間件通過Layer對象根據(jù)路由路徑的不同進(jìn)行劃分 , 使得它們不再像koa的中間件那樣每次請求都執(zhí)行 , 而是針對每次請求采用match方法匹配出相應(yīng)的中間件 , 再利用koa-compose形成一個中間件執(zhí)行鏈 。

推薦閱讀