Axios 在正文值中添加额外的尾部斜杠

Axios adds extra trailing slash in body values

我正在使用 React Native 开发一个应用程序,它与 IoT 芯片(具有非常小的 ram 内存)通信,因为所有逻辑都必须在客户端开发。

该芯片的规格之一是所有字符“,”必须只用一个斜线转义。

例如:

发件人:

{ value: 'foo,bar' }

收件人:

{ value: 'foo\,bar' }

我正在使用 axios 发送此信息:

import axios from 'axios';

const body = { value: 'foo,bar' };
const parsedBody = { value: body.value.replace(/,/g, '\,') } // { value: 'foo\,bar' }

axios({
  method: 'POST',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json; charset=utf-8',
  },
  url: 'https://example.com',
  data: body,
}).then(response => {
  console.log('message sent!');
});

问题是在另一端,服务器正在接收带有额外斜杠的正文(作为对象)

例如:

{ value: 'foo\,bar' }

我不确定信息是否被axios修改了。但是我只需要一个颤音斜杠就可以接收它(我无法在服务器端解析它)

由于您将对象作为 data 传递,我强烈认为 axios 使用 JSON.stringify() 将该对象转换为字符串。对象 { value: 'foo\,bar' } 的正确 JSON 表示是 {"value":"foo\,bar"},因此带有双引号和双反斜杠。

现在我对 axios 不熟悉,它的文档似乎也不是很详细,但也许可以尝试将字符串作为 data 传递。然后你就可以完全控制它的编码方式。

一个非常简单的尝试方法是 data: JSON.stringify(parsedBody).replace(/\\,/g, '\,')
如果您有意发送 \, 而不是 \,,这显然是行不通的。因此,根据您计划发送的数据类型,您可能需要实现自己的字符串化函数(例如:data: `{ value: '${body.value.replace(/([',\])/g, '\')}' }`