我正在尝试为我的应用程序创建特定的路由规则。
但是,我希望这些规则是基于数据库中表格内容的通用规则。
这意味着根据数据库规则,有时可能会在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"
}
我唯一想要的是即时添加/删除路线。
答案 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);