2013-10-02 40 views
0

我通常使用下面的代碼在服務器上管理路線:差異的方法添加中間件流星

WebApp.connectHandlers.stack.splice(0, 0, { 
    route: '...', 
    handle: function(req, res, next) {...}, 
}); 

不過,我已經看到了另一種模式在一些地方:

WebApp.connectHandlers.use(function(req, res, next) { 
    ... 
}); 

它們之間的區別是什麼,除了語法和路由管理?由於性能或其他原因,其中一個更好使用嗎?

回答

3

中間件工作的方式是使用一種列表然後處理響應。所以,如果你有

WebApp.connectHandlers.use(function(req, res, next) { 
    ... 
}); 

如果您不響應到此結束,它會調用next()並找到在堆棧中的下一個連接處理程序來運行,並且如果不具有任何的下等。

這裏有一點點的順序,所以你描述的第一個方法增加了一些東西到堆棧的開頭(或在splice中指定的索引),第二個把它加到堆棧的末尾。

所以流星它取決於其他中間件,如果你想獲得訪問req & res值的其他處理程序之前,你可以使用第一(例如,某些類型的HTTP登錄檢查/升級的WebSocket請求)和另一個與.use的東西在堆棧的末尾(IP地址/ cookie檢查)

有一點要注意,雖然我不是100%確定這個流星也可能使用中間件,所以你需要在流星之前進入堆棧,所以第一種語法可能會更好,特別是如果流星以請求結束,所以最後添加的可能沒有效果。