我将一条路由映射为:
app.get('/health/*', function(req, res){
res.send('1');
});如何在运行时将此路由删除/重新映射到空处理程序?
发布于 2015-02-06 23:49:42
这将删除app.use中间件和/或app.VERB (get/post)路由。在express@4.9.5上测试
var routes = app._router.stack;
routes.forEach(removeMiddlewares);
function removeMiddlewares(route, i, routes) {
switch (route.handle.name) {
case 'yourMiddlewareFunctionName':
case 'yourRouteFunctionName':
routes.splice(i, 1);
}
if (route.route)
route.route.stack.forEach(removeMiddlewares);
}请注意,它需要中间件/路由函数具有名称的名称
app.use(function yourMiddlewareFunctionName(req, res, next) {
... ^ named function
});如果函数是匿名的,It 将不会在中工作:
app.get('/path', function(req, res, next) {
... ^ anonymous function, won't work
});发布于 2012-12-26 06:12:22
Express (至少从3.0.5开始)将其所有路由都保留在app.routes中。从documentation
app.routes对象包含由关联的HTTP谓词定义的所有路由。此对象可用于自省功能,例如,除非使用app.options(),否则Express不仅在内部使用此对象进行路由,而且还提供默认选项行为。您的应用程序或框架也可以通过简单地从该对象中删除路由来删除它们。
您的app.routes应该如下所示:
{ get:
[ { path: '/health/*',
method: 'get',
callbacks: [Object],
keys: []}]
}因此,您应该能够遍历app.routes.get,直到找到您要查找的内容,然后将其删除。
发布于 2015-11-08 08:36:27
上面的方法要求您有一个用于路由的命名函数。我也想这样做,但是没有路由的命名函数,所以我编写了一个npm模块,它可以通过指定路由路径来删除路由。
这就是了:
https://stackoverflow.com/questions/10378690
复制相似问题