【问题标题】:Stop listening to express route停止收听快递路线
【发布时间】:2013-11-07 01:39:42
【问题描述】:

我正在为 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的事情,但我需要找到一种在express中解绑的方法

谢谢!

【问题讨论】:

    标签: node.js express


    【解决方案1】:

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

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

    也许是一个中间函数?

    只要我的 0.02 美元

    干杯

    【讨论】:

    • 中间函数也是我的建议。
    • 我会给出+1,因为我考虑过这一点,但我希望框架灵活,因此他们不需要学习特殊语法来定义路由以适应抽象层。
    【解决方案2】:

    你可以循环遍历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);
    };
    

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

    【讨论】:

      猜你喜欢
      • 2018-12-04
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 2020-06-18
      • 2013-10-13
      • 1970-01-01
      相关资源
      最近更新 更多