2017-03-09 3 views
1

私のアプリケーションに特定のルーティングルールを作成しようとしています。データベースの結果に基づいて動的ルートを復元する

しかし、これらのルールは、データベース内のテーブルの内容に基づいて一般的なものにしたいと思います。

これは、データベースのルールに応じて、一部のルーティングが再作成サービスで挿入または削除されることがあることを意味します。ここで、私は解決策を探していたが、私は何かを見つけることができません

は、私のコードの例です:

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

あなたが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);

関連する問題