Javascript 如何改变膝关节炎应用程序中的AXIOS编码? 在我的膝关节炎应用程序中发送AXIOS请求时,我的查询参数中有一个括号如下: 最近日期:[now-10d到现在]

Javascript 如何改变膝关节炎应用程序中的AXIOS编码? 在我的膝关节炎应用程序中发送AXIOS请求时,我的查询参数中有一个括号如下: 最近日期:[now-10d到现在],javascript,encoding,axios,koa,Javascript,Encoding,Axios,Koa,请求如下: const response = await this.axiosInstance.get('/somePath', { params: { query: query offset: 0, limit: 20, count: true } }) 当我打印response.request时,我注意到有一个axios字段\u currentUrl,它显示了请求的路径。在本例中,它看起来如下所

请求如下:

const response = await this.axiosInstance.get('/somePath', {
      params: {
        query: query
        offset: 0,
        limit: 20,
        count: true
      }
    })
当我打印response.request时,我注意到有一个axios字段
\u currentUrl
,它显示了请求的路径。在本例中,它看起来如下所示:
https://myBaseUrl.com/somePath?query=lastTenDays:[now-10d+TO+now]&偏移量=0&极限=20&计数=true

奇怪的是。如果我像这样编码我的查询参数:
lastTenDays:%5Bnow-10d+到+now%5D
,那么
\u currentUrl
一点也不会改变


似乎当括号没有编码时,它们不会被编码,当它们被编码时,它们会在请求时被解码。发生什么事?如何防止这种情况发生,以便在请求中发送已编码的括号?

好吧,一种解决此问题的黑客方法是像这样运行
decodeURI
&
encodeURI
-

const oldUrl = 'https://myBaseUrl.com/somePath?query=lastTenDays:[now-10d+TO+now]&offset=0&limit=20&count=true';
const newUrl = encodeURI(decodeURI(oldUrl));

事实证明axios做了一些奇怪的事情。在这里签出它们的代码,您可以看到它们有一个自定义的编码函数,其中包括将括号中的代码取消编码到它们的明文值

replace(/%5B/gi, '[').
replace(/%5D/gi, ']');
这就是为什么无论我将%5B还是“[”传递给端点,axios都会将其转换为“[”

解决方案: 可以在此处列出的请求配置中使用
paramsSerializer
指定自定义param序列化程序:

例如,这可能看起来像:

const querystring = require('querystring')
const response = await this.axiosInstance.get('/somePath', {
      params: {
        query: query
        offset: 0,
        limit: 20,
        count: true
      },
     paramsSerializer: querystring.stringify
    })

这不会有帮助。问题是在执行请求后,
lastendays:[now-10d+TO+now]
lastendays:%5Bnow-10d+TO+now%5D
正在转换为
lastendays:[now-10d+TO+now]
即使我硬编码lastendays:%5Bnow-10d+TO+now%5D,它也不会工作