2017-08-10 1 views
0

複数のパターンに対してexpress.js経路をチェックできますか?キャッチオール*以下のルートを考えてみましょう。 req.route*とここで一致します。私は別のallまたはuseミドルウェア内ではなく、同じコールバック内のいくつかの特別なシナリオに対してルートをチェックしたいと思います。Express.js:経路のキャッチをすべて一致

app.all('*', (req, res, next) => { 
    // How do I check if route is a special case like below 
    if(req.route in ['/foo/:param', '/bar/:param']){} 
}) 

答えて

0

したがって、特定の値を探すよりもすべてをキャプチャするためにワイルドカードを使用しないでください。代わりに、これらの特定の値を検索するエンドポイントを作成してから、すべてのワイルドカードをキャプチャするために別のルートを使用します。

app.get(['/test', '/another_value'], (req, res, next) => { 

}) 
+0

多分私は明確ではありませんでした。私のコードのように 'catch-all'の内部でこれをチェックする必要があります。私の 'catch-all'は認証を実行する必要がありますが、いくつかのパスは無視します。 –

1

これらのチェックを実行する最良の方法であると私には思えるので、私は、なぜあなたは、このために別々の.allルートを却下しているかわからない:

app.all('/foo/:param', (req, res, next) => { 
    req.isFoo = true; 
    next(); 
}); 

app.all('/bar/:param', (req, res, next) => { 
    req.isBar = true; 
    next(); 
}); 

app.all('*', (req, res, next) => { 
    if (req.isFoo || req.isBar) { ... } 
}) 

それとも、クリスさんに似答え:両方とも一致するルートが1つあります。

app.all([ '/foo/:param', '/bar/:param' ], (req, res, next) => { 
    req.isSpecial = true; 
    next(); 
}); 
+0

ありがとうRobert。これが私がやっていくことです。もう一つの 'すべての'ルートを避けるような 'express.matches'能力を望んでいた。 –

+0

@AnshulKokaあなたが使用できるモジュールがあります(['path-to-from-params'](https://github.com/dhoulb/path-to-from-params)のように) app.all()ハンドラはよりクリーンです。 – robertklep

関連する問題