搜尋

首頁  >  問答  >  主體

node.js - 怎么实现类似express路由中间件的效果?

nodejs的事件实现类似:

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

app.post(...)

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

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

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

迷茫迷茫2864 天前705

全部回覆(1)我來回復

  • PHP中文网

    PHP中文网2017-04-17 14:52:20

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

    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啦。 (實作略)

    二、題主問題

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

    回覆
    0
  • 取消回覆