根据数据库结果确定dynamic路由

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

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

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

我正在寻找一个解决scheme,但我找不到任何东西,这里是我的代码的一个例子:

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" } 

我唯一想要的是在飞行中添加/删除路线。

你可以查询dynamic数据,并假设你有一个数组 –

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

现在,无论何时请求到达任何dynamic路由,您都可以检查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(); } 

接受更多参数作为路线的一部分,您也可以拥有更多dynamic路线。

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