Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Axios在主体值中添加额外的尾部斜杠_Javascript_Node.js_React Native_Axios_Escaping - Fatal编程技术网

Javascript 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, '\\,') } // {

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

该芯片的规格之一是所有字符“,”必须用一个颤音斜杠转义

例:

发件人:

致:

我使用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!');
});
问题是,在另一端,服务器接收带有额外颤音斜杠的主体(作为对象)

例:


我不确定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' }