簡體   English   中英

如何訪問Express.js中的可選URL參數?

[英]How to access optional URL parameters in Express.js?

在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
    });
});

如果我請求localhost:3000 / show / luis / arriojas / California / 123/456,我將收到:

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

一切正常,但是如果我請求localhost:3000 / show / luis / California / 123,我將收到:

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

如何獲得“加利福尼亞”作為req.params.address而不是req.params.surname?

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}

您的URL中有多個連續的可選參數。 當您按下localhost:3000 / show / luis / California / 123時,express無法知道您打算跳過哪些參數以及保留哪些參數。 最終從左到右分配參數,跳過最后一個無法滿足的可選參數的分配。

若要解決此問題,您可以更改程序設計,以接受所有參數作為查詢字符串而不是url參數。 在這種情況下,您將使用“ localhost:3000 / show?name = luis&address = California&id = 123'訪問您的API,並且您的代碼如下所示:

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) {

現在,您將以“ localhost:3000 / show / luis / at / California / 123”訪問您的API。 在這里,通過知道url中“ at”的位置,express會正確地將“ California”分配給地址而不是姓。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM