2016-04-26 10 views
3

私は人のルートが不一致であることに関する他の質問を読んで、問題を解決するルートを注文しました。私はURLルートがパラメータとして扱われている不一致を表現し、間違ったルートにつながるこの問題を抱えています。例えばエクスプレスルートが間違って一致する

app.get('/byASIN/LowPrice/:asin/:price',function(req,res){}); 

app.get('/byASIN/:asin/:price', function(req, res) {}); 

今、すべてが正常に動作しますが、できるだけ早く、私は最初のルートのうちのいずれかのPARAMを取るとして、それがこれを下回る所定のルートが一致した私が欲しいものではありません。ここでは2つのルートがあります。 私が/byASIN/LowPrice/:asin/:priceを押すと、すべて正常に動作しますが、/byASIN/LowPrice/:asinに達するとすぐに、それはbyASIN/:asin/:priceと一致し、間違った機能を呼び出し、サーバーがクラッシュします。私はそれらを明示的に一致させたいと思います。/byASIN/LowPrice/:asinが呼び出された場合、いくつかの警告で応答します。あなたは1つ少ない引数で呼び出しています。私はここで何が欠けていますか?デフォルトでは

答えて

3

のURLパラメータを表現するにはない optinialある2番目のパラメータが欠落しているため、

app.get('/byASIN/LowPrice/:asin/:price',function(req,res){});

は、/byASIN/LowPrice/:asinと一致しない理由は、これがあります。

しかし、あなたはそれに?を追加することにより、パラメータをオプションにすることができます

app.get('/byASIN/LowPrice/:asin/:price?',function(req,res){});

これはあなたの問題を解決する必要があります。

+0

を注文して固定することができます。 IMO '/ byASIN/LowPrice /'は '/ byASIN /:asin /'とは違う世界ですので、厳密な一致が望まれます。パラメータが次のまったく別のルートに移動するのではなく、パラメータがなくなっているという警告 – user3677331

+0

この回答はinsightを追加しますhttp://stackoverflow.com/a/10695714/489396 –

0

/byASIN/LowPrice/:asin/:priceが処理するルートを定義してから、他のすべてを処理するためにワイルドカードを使用してください。

app.get('/byASIN/LowPrice/:asin/:price',function(req,res){}); 

app.get('*',function(req,res){}); 
+0

残念ですが、 :asin /:price'他にも多くのルートがあります。私は、/ LowPrice /:asinが一致しても、パラメタの数が一致していないにもかかわらず、一番上のものが一致するかどうかを確認してから、byASIN /:asin /:priceに移動する'/ LowPrice'もパラメータとして扱うので、合計で3つのパラメータが間違っています – user3677331

0

Expressは、あなたがそれらを挿入する順序によってルートと一致します。最初に緩やかなルートを定義しておけば、expressはそのルートを最初にマッチとして使用します。これは、最初のルートとして定義した場合、極端な例では、

app.get('*', function(req, res) {}); 

なり、その後、他の経路(次の()を呼び出さずにいる場合)が呼び出されません。

明示的に厳密なものを最初に使用する場合は、厳密なものの前に緩やかなものを定義することによってルートの順序を変更する必要があります。

あなたの問題のために良い解決策になる可能性がルート、エクスプレスサポートの優先順位場合、それはいいだろうが、それまで、残念ながら、これは私が望んでいないだけ:(

関連する問題