大家好; 我使用express框架有几条路由, app.use(’/aaa’, aaa); app.use(’/bbb’, bbb); app.use(’/ccc’, ccc); app.use(’/’, default);
我想在不重启nodejs的前提下,如何将添加在内存中的aaa删除,再加一条路由ddd呢。
网上找了好几天也未有答案,求高手指点,多谢
@fengheGitHub 加在路由里,或者stdin。 重挂路由需要一个复写的js,我项目代码表示下。
var load = function(path){
if(require.resolve(path)){
delete require.cache[require.resolve(path)];
require(path);
}
};
路由还是比较好解释的
//删除某链路
app.use('/remove',function(req,res){
app.use(req.body.route,null);
res.end();
})
//从文件更新链路path是你需要更新的文件
//跟你写法也有关系,可能需要把更新过的文件在所有用到的地方重load。
app.use('/update',function(req,res){
load(req.body.path);
res.end();
})
热重载的最好使用环境是全局 global作为总集的项目。这样load可以直接作用于全局。
var dynamicRoute = {};
function addRoute(url, handler) {
dynamicRoute[url] = handler;
}
function removeRoute(url) {
delete dynamicRoute[url];
}
app.use(function(req, res, next) {
if (dynamicRoute.hasOwnProperty(req.url)) {
return dynamicRoute[req.url](req, res, next);
}
return next();
})
@MiguelValentine 试过了加载可以,但删除不可以: var aaa app.get(’/v3/loadaaa’, function(req,res){ aaa = require(’./aaa/routes/index’); //app.use(’/v3’, null); – 报错[2015-12-08 14:48:05.200] [ERROR] console - TypeError: Router.use() requires middleware function but got a Null app.use(’/v3/aaa’, aaa); res.write(‘Load aaa’); res.end(); }); app.use(’/v3’, default);
但我想了个方法,就是在default中去判断是否申请的路由能够匹配到/v3/aaa(新增的url存入数组中),如果可以走next();
目前还是没有好方法来删除路由。。。。