停止听快车路线

时间:2013-11-06 16:50:12

标签: node.js express

我正在建立快递的资产处理框架。

它将自动重新加载已更改的文件,而无需重新启动整个应用程序。它知道哪些文件产生了什么绑定(如app.get('/asdf')),并且当该文件被更改时,它将取消绑定路由,并使用更改的文件重新绑定。

假设你有一个像这样的快速路由器文件:

app.get('/my_route', method);

一旦你改变它,我需要运行类似~~~~~

的东西
 // pseudo code -- I need something like this
 app.unbind('get', '/my_route', method);

~~~~~

我重新加载之前。那么有unbind方法吗?

我是否需要手动编辑路线对象?

一旦我发现,我将能够更改路由器文件,并让它取消绑定旧的侦听器,然后重新添加新的侦听器。我已经做了similar for socket.io的事情,但我需要找到一种方法来解除快照

谢谢!

2 个答案:

答案 0 :(得分:2)

我假设路径路径本身不会改变。

最后,附加到所述路由的“方法”有什么变化,所以如果你可以抽象出方法定义并允许通过“重新加载”修改过的文件来改变它,那么你就不会真的需要“解开”这条路线。

也许是一个中间函数?

只需我0.02美元

干杯

答案 1 :(得分:1)

您可以遍历app.routes并删除路由,或直接更改回调。这就是routes对象的样子:

{ get: 
   [ { path: '/',
       method: 'get',
       callbacks: [Object],
       keys: [],
       regexp: /^\/\/?$/i },
   { path: '/user/:id',
       method: 'get',
       callbacks: [Object],
       keys: [{ name: 'id', optional: false }],
       regexp: /^\/user\/(?:([^\/]+?))\/?$/i } ]

所以你可以创建这样的东西:

function unbind(method, path) {
  var routes = app.routes[method];
  for (var i = 0; i < routes.length; i++)
    if (routes[i].path == path)
      routes.splice(i, 1);
};

原始路由处理程序位于app.routes.method[i].callbacks,返回一个数组。