根据数据库结果确定动态路由

时间:2017-03-09 14:13:34

标签: javascript node.js routing restify

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

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

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

我唯一想要的是即时添加/删除路线。

2 个答案:

答案 0 :(得分: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 :(得分:1)

我认为你正在寻找更多关于作为路线一部分的论据的内容。

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

例如: 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);