将表单数据发送到 graphql 服务器时出现问题

Problem sending formdata to graphql server

我正在尝试使用 axios 将表单数据发送到 graphql 服务器:

let data = new FormData();
let img = {}
img.file = e.target.files[0];
data.append('operations', '{ "query" : "mutation($file:Upload!){createImage(input:{title: \"test\", image:$file}) {_id, title, image, pin}}"}');
data.append('map', {"0":["variables.file"]})
data.append('0', img);
axios({
          method: "post",
          url: "http://localhost:8000/pin/62310a56ca26b64f107de717/image/",
          data: data,
          headers: { "Content-Type": "multipart/form-data" },
        })
          .then(function (res) {
            console.log(res)
          })
          .catch(function(err){
            console.error(err);
     })

但我一直从我的服务器收到“在‘操作’多部分字段中无效 JSON”,即使完全相同的“操作”对象在邮递员中工作正常。有人知道怎么回事吗?

你的"json"确实无效...

Unexpected token t in JSON at position 64

这是因为您需要转义反斜杠以转义嵌套引号。

切勿手动创建 JSON 字符串。使用 JSON.stringify() 代替

const query = 'mutation($file:Upload!){createImage(input:{title: "test", image:$file}) {_id, title, image, pin}}';

data.append("operations", JSON.stringify({ query }));

您通常也不需要手动设置 content-type headers 除非您从 Node 后端发出请求。有关详细信息,请参阅 this answer