首页 > 解决方案 > 如何将传递给 axios 参数的数组格式化为以下特定格式:[0].mfr=mfr0&[0].mpn=mpn0&[1].mfr=mfr1&[1].mpn=mpn1

问题描述

我正在对一个 web api 进行 axios get 调用,该 web api 正在寻找这种特定格式的查询字符串参数,这似乎不常见:[0].mfr=mfr0&[0].mpn=mpn0&[1].mfr=mfr1& [1].mpn=mpn1

我一直在尝试使用 Qs 库对 paramsSerializer 选项中的参数进行字符串化。

零件 = [{ mfr: "mfr0", mpn: "mpn0" }, { mfr: "mfr1", mpn: "mpn1" }]

findParts(parts, token) {
    return axios
      .request({
        url: "https://<serveraddress>/api/v1/parts/findparts",
        method: "get",
        params: parts,
        headers: {
          Authorization: "Bearer " + token,
          "Content-Type": "text/plain"
        }
      })
      .catch(error => {
        console.log(error);
        Vue.notify({
          type: "error",
          title: "Unable to find parts",
          text: "Unable to find parts"
        });
      });
  }

结果

0={"mfr":"mfr0","mpn":"mpn0"}&1={"mfr":"mfr1","mpn":"mp1"}

paramsSerializer: function(params) {
          return qs.stringify(params);
},

或者

paramsSerializer: function(params) {
          return qs.stringify(params, { arrayFormat: "brackets" });
},

或者

paramsSerializer: function(params) {
          return qs.stringify(params, { arrayFormat: "indices" });
},

结果

0[mfr]=mfr0&0[mpn]=mpn0[mfr]=mfr1&1[mpn]=mpn1

paramsSerializer: function(params) {
          return qs.stringify(params, { allowDots: true });
},

结果

0.mfr=mf0&0.mpn=mpn0&1.mfr=mfr1&1.mpn=mpn1

我可以创建一个自定义 paramsSerializer,但我想知道是否有办法操纵 qs 或传递的部件数组以获得正确的查询字符串结果,而无需手动创建查询字符串和 url 编码值?

标签: vue.jsaxios

解决方案


推荐阅读