Javascript 基于数据库结果恢复动态路由

Javascript 基于数据库结果恢复动态路由,javascript,node.js,routing,restify,Javascript,Node.js,Routing,Restify,我正在尝试为我的应用程序创建特定的路由规则 但是,我希望这些规则是基于数据库中表的内容的通用规则 这意味着有时某些路由可能会根据数据库规则在restify服务中插入或删除 我正在寻找解决方案,但找不到任何解决方案,以下是我的代码示例: server.put('/logging/create', function(req, res, next){ return next(); }); server.delete('/logging/delete', function(req, res,

我正在尝试为我的应用程序创建特定的路由规则

但是,我希望这些规则是基于数据库中表的内容的通用规则

这意味着有时某些路由可能会根据数据库规则在restify服务中插入或删除

我正在寻找解决方案,但找不到任何解决方案,以下是我的代码示例:

server.put('/logging/create', function(req, res, next){
    return next(); 
});

server.delete('/logging/delete', function(req, res, next){
    return next(); 
});

server.post('/logging/update', function(req, res, next){
    return next(); 
});
我想要实现的是动态添加/删除特定请求,而无需重新启动node js脚本。我拥有的是一个包含所有规则的数组。规则的一个例子是:

{
   "name":"/logging/create",
   "method":"put",
   "status":"active"
},
{
   "name":"/logging/delete",
   "method":"delete",
   "status":"inactive"
},
{
   "name":"/logging/update",
   "method":"post",
   "status":"active"
}

我唯一想做的就是动态添加/删除路由。

您可以查询动态数据,并假设您在数组中有该数据-

var ruleData = .... // This is your rules array
现在,无论何时请求到达任何动态路由,您都可以在
ruleData
数组中检查该路由是活动的还是非活动的。如果路由处于活动状态,则转发请求;如果路由处于非活动状态,则返回404状态代码

示例-

server.put('/logging/create', function(req, res, next){
    // checking if rule for this path exists and is active
    if(ruleData.find(rule => rule.name == req.path() && rule.status == 'active') != null)
        next();
    else
        res.send(404, {error: 'This route does not exist'});
});

我想你是在寻找更多的东西,作为路线的一部分

您可以接受参数作为要设置上下文的路由的一部分

例如:
server.get('/logging/:action',loggingHandler)

然后,您可以在loggingHandler中使用req.params.action,并与操作列表进行比较

function listingPaged(req, res, next) {
    switch (req.params.action) {
        case "create":
                      console.log("create log");
                      break;
        case "delete":
                      console.log("delete log");
                      break;
        case "update":
                      console.log("update log");
                      break;
        default:
                console.log("empty");
                break;

       }
       next();
 }
通过接受更多参数作为管线的一部分,您还可以拥有更多动态管线

例如:
server.get('/list/userdetails/:userid/:about',userDetailsHandler)