I have a problem with GraphQL. I want to send axios.post request to my server. I can do it in postman:
{
"query":"mutation{updateUserCity(userID: 2, city:\"test\"){id name age city knowledge{language frameworks}}} "
}
and in graphiql:
mutation {
updateUserCity(userID: 2, city: "test") {
id
name
age
city
knowledge {
language
frameworks
}
}
}
but can't do it in my code:(( here is my code snippet:
const data = await axios.post(API_URL, {
query: mutation updateUserCity(${ id }: Int!, ${ city }: String!) {
updateUserCity(userID: ${ id }, city: ${ city }){
id
name
age
city
knowledge{
language
frameworks
}
}
}
}, {
headers: {
'Content-Type': 'application/json'
}
})
what's wrong in my code?
Value of query
parameter to be passed in request has to be string and names of variables passed to GraphQL queries should be prefixed by $
. You have used string literals for variables in request instead. Also, variables can be passed in post request using variables
key.
Changing your code to something like below should get it to working:
const data = await axios.post(API_URL, {
query: `mutation updateUserCity($id: Int!, $city: String!) {
updateUserCity(userID: $id, city: $city){
id
name
age
city
knowledge{
language
frameworks
}
}
}`,
variables: {
id: 2,
city: 'Test'
}
}, {
headers: {
'Content-Type': 'application/json'
}
})
It seems you're trying to pass variables into the query. Unless I'm wrong, what you have in the axios call and the others are different.
const data = await axios.post(API_URL, {
query: `
updateUserCity(userID: ${id}, city:${city}){
id
name
age
city
knowledge{
language
frameworks
}
}
`
}, {
headers: {
'Content-Type': 'application/json'
}
});
I believe this should work, assuming you have the variables id
and city
defined before this call.
i would like to share you my simple working example
let id = "5c9beed4a34c1303f3371a39";
let body = {
query: `
query {
game(id:"${id}") {
_id
title
}
}
`,
variables: {}
}
let options = {
headers: {
'Content-Type': 'application/json'
}
}
axios.post('http://localhost:3938/api/v1/graphql',body, options)
.then((response)=>{
console.log(response);
});