【问题标题】:Axios adds extra trailing slash in body valuesAxios 在正文值中添加了额外的斜线
【发布时间】:2021-02-18 21:41:38
【问题描述】:

我正在使用 React Native 开发一个应用程序,该应用程序与物联网芯片(内存非常少)进行通信,因为所有逻辑都必须在客户端开发。

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

例如:

发件人:

{ 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 是否正在修改信息。但我只需要用一个颤音斜线接收它(我无法在服务器端解析它)

【问题讨论】:

  • 很可能是您误解了结果,而您用来检查该值的函数是添加转义字符作为表示字符串的一种方式。我们需要查看服务器端代码来判断。
  • 在前端:body.value.split(',').join('\,') 将其转换为相应的格式并查看结果。这里先根据','将字符串转换为数组,然后再使用'\,'将数组转换为字符串
  • @Quentin 这是我想到的第一件事。但是我创建了一个测试服务器来查看结果,当我检查字符串长度时响应有一个额外的字符
  • @RohitDalal 我用这种方法得到了同样的结果

标签: javascript node.js react-native axios escaping


【解决方案1】:

由于您将对象作为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, '\\$1')}' }`

【讨论】:

    猜你喜欢
    • 2015-11-08
    • 2013-01-19
    • 1970-01-01
    • 2017-08-14
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    相关资源
    最近更新 更多