为Meteor添加中间件的方法的差异

时间:2013-10-02 11:26:49

标签: javascript node.js meteor

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

这有一个顺序,所以你描述的第一个方法在堆栈的开头(或在splice中指定的索引)添加了一些东西,第二个方法将它添加到堆栈的末尾。

所以在Meteor中,如果你想访问req&其他处理程序之前的res值可以使用第一个(例如某种HTTP登录检查/升级websocket请求),另一个使用.use表示堆栈末尾的其他内容(IP地址) / cookie检查)

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