2016-04-13 6 views
2

私は(彼らは、サブクエリには制限されません)、次のURLを分割しようとしていると明示して命名「0」アイテム:REを使用し、ルート

www.zookeeper.com/api/動物園/猿/ 1 /へ

を養う:

次のコードで
{ 
    "Main": "zoo", 
    "Sub": "/monkey/1/feed" 
} 

、最後の文字は常にSUB_REQUESTフィールドにありません。

router.get("/:BASE_REQUEST/*:SUB_REQUEST",function(req,res) 
{ 
    res.json(
    { 
     "Main":req.params.BASE_REQUEST,     
     "Sub":req.params.SUB_REQUEST+req.params[0]//append last char hack! 
    }); 
}); 

req.paramsを見ると、常に神秘的な「0」があります。

{ 
    '0': 'd', 
    BASE_REQUEST: 'zoo', 
    SUB_REQUEST: '/monkey/1/fee' 
} 

誰かがこの現象を説明できますか?一体どこから来ているのですか?私は特急のバージョンを使用してい

は4.12.4

答えて

1

確かに、ここで起こっている事はあなたのルートが実際にあなたは、彼らが2

を拾い出していると思う3つのルートのparamsを、拾い出しているということですあなたは、ルートハンドラでconsole.log(req.params);をやってみた場合、あなたは/bob/is/your/uncleへの要求は、次のオブジェクトになりますことがわかります:あなたは2 PA名付けたので

{ '0': 'is/your/uncl', BASE_REQUEST: 'bob', SUB_REQUEST: 'e' }

だことまた名前のついたワイルドカードを持っています。デフォルトでは名前は「0」です。 3番目のパラメータは経路の少なくとも一部を消費しなければならないので、最後の文字を取得しています。私はなぜあなたのマシンがSUBと0を逆転しているように見えるのか分かりません。あなたが質問を書いた方法で間違っていない限り。

:SUB_REQUESTを取り除くだけなら、それはあなたが望むように動作するはずです。req.params.0(またはreq.params['0'])でワイルドカードビットを参照する必要があります。旧バージョンのExpressでは名前付きのワイルドカードパラメータを持つことができましたが、ドキュメントでそれを見つけることはできませんので、他のものがうまく機能するようにしていないと思います。

+0

thx!私は出力をもう一度チェックしました。まさに私の質問に書いたようなものです。 –

+0

3番目のパラメータを削除すると、探しているものを得ることができるはずです。あなたはそれを試しましたか? – Paul

+0

うん、その作業、 "副問合せ"は '0'です。 –

関連する問題