[英]Dynamic express.js routes based on database entries with no restart
[英]Restify dynamic routes based on database result
我正在嘗試為我的應用程序創建特定的路由規則。
但是,我希望這些規則基於數據庫中表的內容而通用。
這意味着有時某些路由可能會根據數據庫規則而在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"
}
我唯一想做的就是即時添加/刪除路線。
您可以查詢動態數據,並假設您將其放在一個數組中-
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'});
});
我認為您正在尋找更多的論點,這些論點是路線的一部分。
您可以接受參數作為設置上下文的路由的一部分。
例如: 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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.