簡體   English   中英

根據數據庫結果重新調整動態路由

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM