2017-03-09 41 views
1

我正在嘗試爲我的應用程序創建特定的路由規則。根據數據庫結果確定動態路由

但是,我希望這些規則是基於數據庫中表的內容的通用。

這意味着有時可能會根據數據庫規則在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" 
} 

我唯一希望的是添加/刪除路由的飛行。

回答

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

我認爲你正在尋找的東西更多的論據是路由的部分線路。

您可以接受參數作爲設置上下文的路線的一部分。

用於例如: server.get('/logging/:action', loggingHandler);

然後你可以使用req.params.action在loggingHandler和比較反對的操作列表。

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);