2016-07-06 54 views
-1

在Express.js 4.14,我有以下路線:如何訪問Express.js中的可選URL參數?

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 /加利福尼亞/ 123/456,我將得到:

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

一切都與OK,但如果我要求本地主機: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

謝謝埃米利奧。它像探戈一樣工作,簡直美麗。 –

2

您在您的網址有多個連續的可選參數。當你點擊localhost:3000/show/luis/California/123時,express沒有辦法知道你打算跳過哪些參數,以及要保留哪些參數。它最終從左向右分配參數,跳過最後一個不可滿足的可選參數的分配。

要解決此問題,可以將程序設計更改爲接受查詢字符串而不是url參數的所有參數。在這種情況下,你會與訪問API「?本地主機: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'的位置,express會正確地分配'California'來代替姓氏。