微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NodeJs 没有将两个过滤器属性附加到 url 参数

如何解决NodeJs 没有将两个过滤器属性附加到 url 参数

我正在尝试执行 get 请求并将几个 url 参数传递到请求中,但由于某种原因,该请求似乎只添加了两个同名的 url 参数之一。

我的代码是:

  async function getorderByDate(data) {
   const options = {
    method: 'get',url: config.cloverApiUrl +'/v3/merchants/'+data.merchant_id
      +'/orders',headers: {
      Authorization: 'Bearer ' + data.token,ContentType: 'application/json'
    },qs: {
      filter: `clientCreatedTime>` +data.minDate,filter: `clientCreatedTime<` +data.maxDate,expand: 'lineItems',limit: 1000
    }
  };
  console.log('here ' +JSON.stringify(options.qs));
  const response = request(options);
}

问题是当我在收到请求之前记录查询参数时:

 here {"filter":"clientCreatedTime<1613624400000","expand":"lineItems","limit":1000}

我不知道为什么它只添加了所有 url 参数,包括一个 clientCreatedTime 过滤器而不是另一个。预先感谢您的帮助。

解决方法

你必须使用一个数组:

      filter: [`clientCreatedTime>` +data.minDate,`clientCreatedTime<` +data.maxDate],

您必须将 qsStringifyOptions 设置为 { indices: false }

   const options = {
    method: 'get',url: config.cloverApiUrl +'/v3/merchants/'+data.merchant_id
      +'/orders',headers: {
      Authorization: 'Bearer ' + data.token,ContentType: 'application/json'
    },qs: {
      filter: [`clientCreatedTime>` +data.minDate,expand: 'lineItems',limit: 1000
    },qsStringifyOptions: { indices: false }
  };

此外,request 已弃用。因此,您很可能想找到一种处理 fetch 的方法。为此存在多个包,例如 node-fetchwhatwg-fetchisomorphic-fetch

再次提醒,如果是 request 库,您需要使用回调或将其视为流。如果它是 request-promise,那会给你一个承诺,但你确实需要 await 它才能得到响应。该 async 函数没有返回值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。