2016-09-22 17 views
0

expressは追加された順にルートを評価するので、より具体的なルートを最初に置く必要があります。Express Router:新しいルートを許可するすべてのルート

server.get('/product/:id', router.getProduct); 
server.get('/user/:id', router.getUser); 
server.get('*', router.notFound); 

ただし、サイトの管理側は新しいセクションを作成できる必要があります。新しいセクションが作成されると、それがデータベースに追加され、新しいルートが作成されます。しかし、*ルートはすべてをキャプチャし、新しいセクションルートの前に追加されました。したがって、新しいセクションルートは決して一致しません。

*ルートを削除すると、新しいセクションルートが一致します。私の質問は、*ルートを使わずに、404リクエストで一致するルートを作成する方法です。または、ルーティングマッチングの最後に常に一致するルートを追加する方法はありますか?

助けてください。

+0

セクションURLの名前はどのようになっていますか?それとも完全に恣意的なのでしょうか? – robertklep

+0

まあ、それは管理者までなければならないので、ええ、彼らは好きなものを入力することができます。少なくともそれがアイデアです。おそらく解決策はルートの名前付け方法を再構成することでしょうか? – BishopZ

答えて

1

のセクションでは、任意の名前を持つことができるので、あなたはキャッチオールハンドラでそれらの有効性を確認することができます。それはあなたのコードが設定されているかを正確に依存しますが、アイデア与えること:つまり

server.get('/product/:id', router.getProduct); 
server.get('/user/:id', router.getUser); 
server.get('*', function(req, res, next) { 
    let sectionName = req.url.substring(1); 
    Sections.findByName(sectionName, (err, section) { 
    // Pass errors to the generic error handler. 
    if (err) return next(err); 

    // If the section isn't known, pass it along. 
    if (! section) return next(); 

    // Perform the section code here. 
    ... 
    }); 
}); 
server.use(router.notFound); 

:それはの一部でない限りget('*')ルートは(先頭のスラッシュを削除し、要求のパスを取るだろうしセクション名)を検索し、データベースで検索し、エラーまたは未知のセクション名を処理します。

最後のハンドラは、セクションハンドラを通過した要求に対して404を生成します。

関連する問題