如何使用Express.js处理空URL参数

问题描述 投票:0回答:4

我正在为我的Web服务类分配作业,无法弄清楚如何处理空URL参数。这是我的代码:

app.get('/nachos/:x/:cheese/:tomatoes/:salsa/:hotsauce', (req, res) => {
    var x = parseInt(req.params['x'])
    var cheese = (req.params['cheese'])
    var tomatoes = (req.params['tomatoes'])
    var salsa = (req.params['salsa'])
    var hotsauce = (req.params['hotsauce'])

    res.send('You ordered ' + x + ' nacho(s) with ' + cheese + ', ' + tomatoes + ', ' + salsa + ', ' 
    + hotsauce + '.')})

此代码在填充所有参数的情况下都能正常工作。但是,如果不想,如何处理null参数,例如salsa并输入url localhost:port / nachos / 1 / cheese / tomatoes / hotsauce

javascript node.js express web-services url
4个回答
0
投票

您可以检查它们是否未定义,例如:

const cheese = req.params['cheese'] || '';

0
投票

以这种方式传递参数,要求API用户以正确的顺序发送参数。要处理您想要的情况(一种成分丢失),您需要创建另一条路线来处理。但是您可以用另一种方式来执行此操作,例如将参数传递为query strings或什至在请求正文上发送它们(最好是非GET路由器)。


0
投票

如果我阅读正确,问题是:

例如,如果我不想,如何处理null参数,salsa并输入URL localhost:port/nachos/1/cheese/tomatoes/hotsauce

您不会得到null,它根本不会与路线匹配。

您可以将参数设为可选,例如:

app.get('/nachos/:x?/:cheese?/:tomatoes?/:salsa?/:hotsauce?', (req, res) => {

或添加要匹配的路线,这可能会失控。

app.get([
    //...
    '/nachos/:x/:cheese/:tomatoes',
    '/nachos/:x/:cheese/:tomatoes/:hotsauce',
    '/nachos/:x/:cheese/:tomatoes/:salsa/:hotsauce',
    //...
], (req, res) => {

0
投票

所有可选成分可能都属于查询字符串,如下所示:

 /nachos/2?cheese=yes&tomatoes=yes&salsa=yes&hotsauce=yes

然后,您可以忽略其中任何一个选项并编写代码,这样,如果不存在,则默认为“ no”。因此,没有辣酱的订单可能是以下之一:

 /nachos/2?cheese=yes&tomatoes=yes&salsa=yes&hotsauce=no
 /nachos/2?cheese=yes&tomatoes=yes&salsa=yes

没有辣酱或莎莎酱的订单可能就是这样:

 /nachos/2?cheese=yes&tomatoes=yes

然后,您的请求处理程序将如下所示:

const orderOptions = ["cheese", "tomatoes", "salsa", "hotsauce"];

app.get('/nachos/:x', (req, res) => {
    console.log(req.query);

    let text = orderOptions.map(item => {
       return req.query[item] === "yes" ? item : null;
    }).filter(item => !!item).join(", ");

    res.send(`You ordered ${req.params.x} nacho(s) with ${text}.`);
});
© www.soinside.com 2019 - 2024. All rights reserved.