首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除NodeJS Express中的路由映射

删除NodeJS Express中的路由映射
EN

Stack Overflow用户
提问于 2012-04-30 12:58:45
回答 8查看 25.4K关注 0票数 24

我将一条路由映射为:

代码语言:javascript
复制
app.get('/health/*', function(req, res){
    res.send('1');
});

如何在运行时将此路由删除/重新映射到空处理程序?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2015-02-06 23:49:42

这将删除app.use中间件和/或app.VERB (get/post)路由。在express@4.9.5上测试

代码语言:javascript
复制
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);
}

请注意,它需要中间件/路由函数具有名称的名称

代码语言:javascript
复制
app.use(function yourMiddlewareFunctionName(req, res, next) {
    ...          ^ named function
});

如果函数是匿名的,It 将不会在中工作:

代码语言:javascript
复制
app.get('/path', function(req, res, next) {
    ...          ^ anonymous function, won't work                    
});
票数 34
EN

Stack Overflow用户

发布于 2012-12-26 06:12:22

Express (至少从3.0.5开始)将其所有路由都保留在app.routes中。从documentation

app.routes对象包含由关联的HTTP谓词定义的所有路由。此对象可用于自省功能,例如,除非使用app.options(),否则Express不仅在内部使用此对象进行路由,而且还提供默认选项行为。您的应用程序或框架也可以通过简单地从该对象中删除路由来删除它们。

您的app.routes应该如下所示:

代码语言:javascript
复制
{ get: 
   [ { path: '/health/*',
       method: 'get',
       callbacks: [Object],
       keys: []}]
}

因此,您应该能够遍历app.routes.get,直到找到您要查找的内容,然后将其删除。

票数 25
EN

Stack Overflow用户

发布于 2015-11-08 08:36:27

上面的方法要求您有一个用于路由的命名函数。我也想这样做,但是没有路由的命名函数,所以我编写了一个npm模块,它可以通过指定路由路径来删除路由。

这就是了:

https://www.npmjs.com/package/express-remove-route

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10378690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档