【问题标题】:Restify dynamic routes based on database result根据数据库结果重新调整动态路由
【发布时间】:2017-07-30 13:42:22
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: javascript node.js routing restify


    【解决方案1】:

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

    var ruleData = .... // This is your rules array
    

    现在,每当请求到达任何动态路由时,您都可以检查ruleData 数组是否该路由是活动的非活动的。如果路由 active 则转发请求,如果 inactive 则返回 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'});
    });
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-01-25
        • 1970-01-01
        • 2023-04-01
        • 2023-03-18
        • 1970-01-01
        • 2020-10-07
        • 2023-03-19
        • 1970-01-01
        • 2016-05-07
        相关资源
        最近更新 更多