Tengo una mutación como esta-
mutation signUp($avatar: Upload!) { signUp( avatar: $avatar input: { name: "Siam Ahnaf" email: "siamahnaf198@aol.com" password: "12345678" } ) { message token } }Para esto, he enviado una solicitud de la siguiente aplicación js como esta:
var formData = new FormData(); formData.append('operations', '{ "query": "mutation($file: Upload!) {signUp(avatar: $file, input: {name: "Siam Ahnaf", email: "siamahnaf198@yahoo.com", password: "siam1980"}){message, token}}", "variables": { "file": null } }'); formData.append('map', '{ "0": ["variables.file"] }'); formData.append('0', Image); await axios({ url: "http://localhost:3001/graphql", method: "post", data: formData, Headers: { 'Accept': 'application/json' } }) .then(response => console.log(response)) .catch(error => console.log(error));Ahora recibo un error como: JSON no válido en el campo multiparte de 'operaciones'
Pero no puedo entender dónde me equivoco en la 'operación' json. Por favor, ayúdame.
Adelanto gracias.
Estoy copiando mi respuesta aquí de la pregunta casi duplicada en caso de que se cierre:
Si tiene comillas dentro de comillas y desea ejecutar JSON. JSON.parse en él, debe escapar de ellas (como han mencionado otros). Sin embargo, en su duplicado de seguimiento, no puede simplemente escapar de las comillas. Tienes que escapar de ellos dos o tres veces.
Aquí está la explicación:
'{ "query": "mutation($file: Upload!) {signUp(avatar: $file, input: {name: \"Siam Ahnaf\", email: \"siamahnaf198@yahoo.com\", password: \"siam1980\"}){message, token}}", "variables": { "file": null } }' Cuando esto es analizado por JavaScript (porque está dentro de comillas simples), toma \" y se da cuenta de que está tratando de escapar de ellos (innecesariamente, ya que no era una comilla simple), por lo que lo convierte en " . Ahora el analizador ve el valor dentro de las comillas (escapado):
{ "query": "mutation($file: Upload!) {signUp(avatar: $file, input: {name: "Siam Ahnaf", email: "siamahnaf198@yahoo.com", password: "siam1980"}){message, token}}", "variables": { "file": null } }Como puede ver, el resaltador de sintaxis cambia de color a la mitad, porque las comillas ya se escaparon.
Para obtener el resultado deseado, debe hacer que el procesamiento de la PRIMERA cadena termine con barras invertidas, por lo que también debe escapar de THE BACKSLASHES:
'{ "query": "mutation($file: Upload!) {signUp(avatar: $file, input: {name: \\"Siam Ahnaf\\", email: \\"siamahnaf198@yahoo.com\\", password: \\"siam198\\"}){message, token}}", "variables": { "file": null } }'Ahora la pregunta es si necesita DOS barras invertidas o TRES. La respuesta aquí es que, dado que su cadena EXTERNA usa comillas simples, NO necesita escapar TAMBIÉN de las comillas dobles internas, por lo que solo necesita dos barras invertidas por cada comilla doble que desee conservar. Si estuviera usando comillas dobles para su cadena externa, tendría que escapar triplemente en lugar de solo doble, o su comilla tampoco se escaparía, y la cadena original no sería válida.
Regla general: si está tratando de escapar del MISMO tipo de cita que está usando para su cadena, triple escape. Si está tratando de escapar de un tipo diferente, doble escape.