我的路线映射为:
app.get('/health/*', function(req, res){
res.send('1');
});
Run Code Online (Sandbox Code Playgroud)
如何在运行时删除/重新映射此路由到空处理程序?
lag*_*lex 26
这将删除app.use中间件和/或app.VERB(获取/发布)路由.在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);
}
Run Code Online (Sandbox Code Playgroud)
请注意,它要求中间件/路由功能具有名称:
app.use(function yourMiddlewareFunctionName(req, res, next) {
... ^ named function
});
Run Code Online (Sandbox Code Playgroud)
如果函数是匿名的,它将无法工作:
app.get('/path', function(req, res, next) {
... ^ anonymous function, won't work
});
Run Code Online (Sandbox Code Playgroud)
Bra*_*rad 24
Express(至少从3.0.5开始)保留其所有路线app.routes.从文档:
app.routes对象包含由关联的HTTP谓词映射的所有路由.此对象可用于内省功能,例如,Express在内部使用此功能不仅用于路由,还提供默认的OPTIONS行为,除非使用app.options().您的应用程序或框架也可以通过从这个对象中删除它们来删除路由.
你app.routes应该看起来像这样:
{ get:
[ { path: '/health/*',
method: 'get',
callbacks: [Object],
keys: []}]
}
Run Code Online (Sandbox Code Playgroud)
因此,您应该能够循环app.routes.get直到找到所需内容,然后将其删除.
上述方法要求您为路由指定一个命名函数。我也想这样做,但是没有为路由命名的功能,因此我编写了一个npm模块,该模块可以通过指定路由路径来删除路由。
干得好:
https://www.npmjs.com/package/express-remove-route
| 归档时间: |
|
| 查看次数: |
18487 次 |
| 最近记录: |