0

我正在为 express 构建一个资产处理框架。

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

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

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

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

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

~~~~~

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

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

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

谢谢!

4

2 回答 2

2

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

最后,更改的是附加到所述路由的“方法”,因此如果您可以抽象出方法定义并允许通过“重新加载”已修改的文件来更改它,那么您实际上不需要“解绑”路线。

也许是一个中间功能?

只是我的 0.02 美元

干杯

于 2013-11-06T17:04:47.513 回答
1

您可以循环app.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);
};

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

于 2013-11-06T17:39:42.437 回答