2016-07-06 5 views
-1

、私は次のルートがあります。私はlocalhostの要求した場合Express.jsのオプションのURLパラメータにアクセスするには? Express.js 4.14で

app.get('/show/:name/:surname?/:address?/:id/:phone?', function(req, res) { 
    res.json({ 
     name: req.params.name, 
     surname: req.params.surname, 
     address: req.params.address, 
     id: req.params.id, 
     phone: req.params.phone 
    }); 
}); 

を:3000 /ショー/ルイス/ arriojas /カリフォルニア//456 123は、私が受け取ることになります:

{"name":"luis","surname":"arriojas","address":"California","id":"123","phone":"456"} 

すべてはそれでOKですが、私はlocalhostを要求した場合:3000 /ショー/ルイス/カリフォルニア/ 123は、私が受け取ることになります:

{"name":"luis","surname":"California","id":"123"} 

にはどうすればいいの代わりreq.params.addressとして「カリフォルニア」を得ることができますreq.params.surname?

+1

これは分かりません...状態と名前に違いはありません。 – epascarello

答えて

3
app.get('/show/:name/:id/', function(req, res) { 
    res.json({ 
     name: req.params.name, 
     surname: req.query.surname, 
     address: req.query.address, 
     id: req.params.id, 
     phone: req.query.phone 
    }); 
}); 

あなたがlocalhost:3000/show/luis/123?surname=arriojas&address=California&phone=456を要求し、私は、あなたが受け取る場合:

{"name":"luis","surname":"arriojas","address":"California","id":"123","phone":"456"} 

を、あなたがlocalhost:3000/show/luis/123&address=Californiaを要求した場合、あなたは受け取ります:

{"name":"luis","surname":undefined, "address":"California","id":"123","phone":undefined} 
+0

ありがとうEmilio。タンゴのように機能し、単に美しい。 –

2

あなたのURLで複数の連続したオプションのパラメータを持っています。 localhost:3000/show/luis/California/123を押すと、expressはスキップするパラメータと保持するパラメータを知る方法がありませんでした。それは最後の満足できないオプションのパラメータの割り当てをスキップして、左から右へパラメータを割り当てることに終わりました。

この問題を解決するには、urlパラメータの代わりにすべてのパラメータをクエリ文字列として受け入れるようにプログラムデザインを変更するか、その場合にはあなたがあなたのAPIにアクセスするだろう「?localhostを:3000 /ショー名前=ルイス&アドレス=カリフォルニア& ID = 123」、そしてあなたのコードは次のようになる:あなたがしたい場合は、しかし、

app.get('/show', function(req, res) { 
    res.json({ 
     name: req.query.name, 
     surname: req.query.surname, 
     address: req.query.address, 
     id: req.query.id, 
     phone: req.query.phone 
    }); 
}); 

urlパラメータを使用する場合は、オプションのコンポーネント間に必須パスコンポーネントを挿入する必要があります。何かのように、

app.get('/show/:name/:surname?/at/:address?/:id/:phone?', function(req, res) { 

あなたはあなたのAPIに 'localhost:3000/show/luis/at/California/123'としてアクセスします。ここでは、URLの 'at'の位置を知ることによって、エクスプレスは姓の代わりに住所に 'California'を正しく割り当てます。

関連する問題