node.js - 怎么实现类似express路由中间件的效果?
迷茫
迷茫 2017-04-17 14:50:20
0
1
622

nodejs的事件实现类似:

app.use(function (req, res, next) {
    cosole.log(res)
    next()
})

app.post(...)

类似上面,需要实现类似的事件效果:

event.watch('all', cb)
event.watch('[event type]', cb)

就是监控所有事件并作出反馈但不会影响事件的单独执行。这里使用once和emit创建触发事件

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(1)
洪涛

以下內容主要分為兩部分:

  1. express中間件大致實現。

  2. 題主最後的問題。

一、express中間件大致實現

先大致說下express裡的路由中間件是怎麼實現的。 (為了減少複雜度,這裡先不說路由拆分的實作)

路由新增

  1. express 內部維護了一個叫做stack的數據,當用戶調用類似app.post(path, fn) 這樣的路由註冊方法時,就會往stack裡添加一個路由實例。這裡抽象的認為這個路由實例是 {path: path, handler: fn},其中,path為路由對應的路徑,handler為對應的中間件。

  2. 比較特殊的是app.all(path, fn),其實內部實作也不複雜,可以粗暴的認為,是遍歷一遍node支援的所有htp methods,然後呼叫路由註冊方法,例如app.get(path, fn)app.post(path, fn) ……(內部實現比這巧妙些,沒這麼粗暴)

請求處理

  1. 網路請求過來,express 內部會偵測請求的http method、路徑,然後遍歷stack數組,如果同時滿足 method相同 且 路由命中,那麼,就呼叫對應的 中間件。

  2. method相同 且 路由命中 的路由規則 可能有多個,那麼是怎麼實現多個中間件順序呼叫的呢?就是next啦。 (實作略)

二、題主問題

回到問題中的「事件效果」。參考上面的步驟,基本上就知道該怎麼實現了。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!