我通常使用以下代码来管理服务器上的路由:
WebApp.connectHandlers.stack.splice(0, 0, {
route: '...',
handle: function(req, res, next) {...},
});
但是,我在某些地方看到了另一种模式:
WebApp.connectHandlers.use(function(req, res, next) {
...
});
除了语法和路由管理之外,它们之间还有什么区别?由于性能或其他原因,其中一个更好使用吗?
最佳答案
中间件的工作方式是使用某种列表然后处理响应。所以如果你有
WebApp.connectHandlers.use(function(req, res, next) {
...
});
如果您没有在此处以响应结束,它将调用 next()
并在堆栈中查找要运行的下一个连接处理程序,如果没有任何下一个,那么上。
这有一点顺序,因此您描述的第一个方法将某些内容添加到堆栈的开头(或 splice 中指定的索引),第二个方法将其添加到堆栈的末尾。
因此,在 Meteor 中,它取决于其他中间件,如果您想在其他处理程序之前访问 req
和 res
值,您可以使用第一个(例如某种 HTTP 登录检查/升级 websocket 请求),另一种使用 .use
在堆栈末尾进行其他操作(IP 地址/cookie 检查)
有一点需要注意,虽然我不是 100% 确定这个 Meteor 也可能使用中间件,所以你需要在 Meteor 之前到达堆栈,所以第一个语法可能会更好,特别是如果 Meteor 以请求结束的话所以最后添加的可能没有效果。
关于javascript - Meteor添加中间件方法的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19135828/