Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
316 views
in Technique[技术] by (71.8m points)

node.js - Remove route mappings in NodeJS Express

I have a route mapped as:

app.get('/health/*', function(req, res){
    res.send('1');
});

How can I remove / remap this route to an empty handler at runtime?

Question&Answers:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This removes app.use middlewares and/or app.VERB (get/post) routes. Tested on [email protected]

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);
}

Note that it requires that the middleware/route functions have names:

app.use(function yourMiddlewareFunctionName(req, res, next) {
    ...          ^ named function
});

It won't work if the function is anonymous:

app.get('/path', function(req, res, next) {
    ...          ^ anonymous function, won't work                    
});

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...