【问题标题】:How do I send a request with superagent that uses the same query parameter如何使用使用相同查询参数的超级代理发送请求
【发布时间】:2020-04-08 10:09:29
【问题描述】:

我正在尝试向正在构造这样的 url 的 php 服务器发出请求:

website.com/?q=help&q=moreHelp&q=evenMoreHelp

如何使用 superagent 传递具有多个值的相同查询?

我试过了:

req.get('website.com').query({q:'help',q:'moreHelp',q:'evenMoreHelp'}).end(...)

但我不确定它是否真的发送了所有三个“q”值。我应该怎么做才能确保它们都被发送出去?

【问题讨论】:

    标签: javascript node.js superagent


    【解决方案1】:

    当您以尝试的方式传递查询时,您肯定不会看到所有三个 q 值,因为您正在那里创建一个 JavaScript 对象,是的,只有一个 q 值:

    $ node
    > {q:'help',q:'moreHelp',q:'evenMoreHelp'}
    { q: 'evenMoreHelp' }
    

    Superagent 允许查询字符串,如本例中straight from the docs:

    request
      .get('/querystring')
      .query('search=Manny&range=1..5')
      .end(function(res){
    
      });
    

    所以如果你传递字符串'q=help&q=moreHelp&q=evenMoreHelp' 你应该没问题。比如:

    req.get('website.com').query('q=help&q=moreHelp&q=evenMoreHelp').end(...)
    

    如果这太难看,你可以试试(警告:我没试过这个):

    req.get('website.com')
     .query({ q: 'help' })
     .query({ q: 'moreHelp' })
     .query({ q: 'evenMoreHelp' })
     .end(...);
    

    【讨论】:

    • 使用查询字符串似乎解决了我的问题。现在我只需要说服 php 服务器给我一个合适的 api,这样我就不需要多次传递相同的密钥了。
    • 一个 API 获取同一个键的多个实例是正确且常见的做法。用原生 js 对象来做这件事并不容易。
    【解决方案2】:

    Superagent 1.5.0 开始,您可以将数组作为查询对象的属性传递,它将生成多个同名的查询参数:

    req.get('website.com').query({foo: ['bar1', 'bar2']})
    

    结果为@​​987654323@

    附带说明,如果您想要 Rails parameter[]=value 语法,那么以下对我有用:

    req.get('website.com').query({'foo[]': ['bar1', 'bar2']})
    

    【讨论】:

    • 当我使用只有一个元素的.query({foo: []}) 语法时,它会将其作为字符串传递。我不得不使用.query({'foo[]':}) 语法来强制它作为数组传递。
    【解决方案3】:

    我可以确认将参数作为数组传递到查询中效果很好,如下所示:

    query: {
          productId,
          orderStatuses: ['FOO', 'BAR', 'OTHER'],
        },
    

    【讨论】:

      猜你喜欢
      • 2021-07-03
      • 2019-01-20
      • 2019-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 2021-07-13
      相关资源
      最近更新 更多