我正在建立快递的资产处理框架。
它将自动重新加载已更改的文件,而无需重新启动整个应用程序。它知道哪些文件产生了什么绑定(如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的事情,但我需要找到一种方法来解除快照
谢谢!
答案 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
,返回一个数组。