2017-03-09 89 views
1

我正在尝试为我的应用程序创建特定的路由规则。根据数据库结果确定动态路由

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

这意味着有时可能会根据数据库规则在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(); 
}); 

我想实现的是添加/删除的具体要求对飞,无需重新启动节点js脚本。我拥有的是一个包含所有规则的数组。规则的一个例子是:

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

我唯一希望的是添加/删除路由的飞行。

回答

1

您可以通过查询动态数据,并假设你有一个数组 -

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

我认为你正在寻找的东西更多的论据是路由的部分线路。

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

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

然后你可以使用req.params.action在loggingHandler和比较反对的操作列表。

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