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, '\')}' }`
)
我正在使用 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, '\')}' }`
)