J.g
J.g

Reputation: 41

Problem sending formdata to graphql server

I am trying to send form data to a graphql server using axios:

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);
     })

but I keep getting "Invalid JSON in the ‘operations’ multipart field" from my server even though the very same "operation" object works fine in postman. Anybody know what's going on?

Upvotes: 1

Views: 3493

Answers (1)

Phil
Phil

Reputation: 164766

Your "json" is indeed invalid...

Unexpected token t in JSON at position 64

This is because you would have needed to escape the backslashes to escape the nested quotes.

Never manually create JSON strings. Use JSON.stringify() instead

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

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

You also generally don't need to manually set content-type headers unless you're making the request from a Node backend. See this answer for more details on that.

Upvotes: 2

Related Questions