Javascript Axios在主体值中添加额外的尾部斜杠
我正在用React Native开发一个应用程序,它与一个IoT芯片(只有很少的ram内存)通信,因为所有的逻辑都必须在客户端开发 该芯片的规格之一是所有字符“,”必须用一个颤音斜杠转义 例: 发件人: 致: 我使用axios发送此信息:Javascript Axios在主体值中添加额外的尾部斜杠,javascript,node.js,react-native,axios,escaping,Javascript,Node.js,React Native,Axios,Escaping,我正在用React Native开发一个应用程序,它与一个IoT芯片(只有很少的ram内存)通信,因为所有的逻辑都必须在客户端开发 该芯片的规格之一是所有字符“,”必须用一个颤音斜杠转义 例: 发件人: 致: 我使用axios发送此信息: import axios from 'axios'; const body = { value: 'foo,bar' }; const parsedBody = { value: body.value.replace(/,/g, '\\,') } // {
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!');
});
问题是,在另一端,服务器接收带有额外颤音斜杠的主体(作为对象)
例:
我不确定axios是否正在修改该信息。但是我只需要用一个trilling斜杠来接收它(我无法在服务器端解析它)由于您将对象作为
数据传递,我强烈假设axios使用JSON.stringify()
将该对象转换为字符串。对象{value:'foo\\,bar'}
的正确JSON表示形式是{“value”:“foo\\,bar”}
,因此带有双引号和双反斜杠
现在我对axios不太熟悉,它的文档似乎也不太详细,但可以尝试将字符串作为数据
传递。然后你就可以完全控制它的编码方式
一种非常简单的尝试方法是data:JSON.stringify(parsedBody).replace(/\\\\\,/g,'\\\,')
如果您有意发送\\,
而不是\,
,这显然不起作用。因此,根据您计划发送的数据类型,您可能需要实现自己的字符串化功能(例如:data:`{value:'${body.value.replace(/([',\\])/g,\\$1')}`
)很可能是您误解了结果,并且您用来检查值的函数正在添加转义字符,这只是表示字符串的一种方式。我们需要在前端查看服务器端代码。body.value.split(“,”).join(“\,”)将其转换为相应的格式并查看结果。在这里,首先根据“,”将字符串转换为数组,然后使用“\,”@Quentin将数组转换为字符串,这是我想到的第一件事。但是我创建了一个测试服务器来查看结果,当我检查字符串时,响应有一个额外的字符length@RohitDalal我用这种方法得到了同样的结果
{ value: 'foo\,bar' }
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' }