0

我通常使用以下代码来管理服务器上的路由:

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

但是,我在某些地方看到了另一种模式:

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

除了语法和路由管理之外,它们之间有什么区别?由于性能或其他原因,其中一个更好用吗?

4

1 回答 1

3

中间件的工作方式是使用一种列表然后处理响应。所以如果你有

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

如果您没有在此处以响应结束,它将调用next()并找到堆栈中的下一个连接处理程序以运行,如果该处理程序没有任何内容,则以此类推。

对此有一点顺序,因此您描述的第一个方法将某些内容添加到堆栈的开头(或 splice 中指定的索引),而第二个方法将其添加到堆栈的末尾。

因此,在 Meteor 中,它取决于其他中间件,如果您想在其他处理程序之前访问req&res值,您可以使用第一个(例如某种 HTTP 登录检查/升级 websocket 请求)和另一个.use用于其他的东西在堆栈的末尾(IP 地址/cookie 检查)

有一点需要注意,虽然我不是 100% 确定这个 Meteor 可能也在使用中间件,所以你需要在流星之前到达堆栈,所以第一个语法可能会更好,特别是如果流星以请求结束,那么那些最后添加可能没有效果。

于 2013-10-02T11:52:17.107 回答