я пишу простой пример поста в Grapql, используя axios. Идеальный рабочий пример
let body = {
query: `
query {
game(id:"5c9beed4a34c1303f3371a38") {
_id
title
}
}
`,
variables: {}
}
axios.post("http://localhost:3344/graphql", body)
.then(res => {
console.info(res.data) // cool data from server
})
Но я хотел бы использовать такие переменные, которые я видел в каком-то примере, но я не могу заставить его работать.
let body = {
query: `
query {
game(id: $id) { // IT SUPPOSE THE ID VARIABLE SHOULD BE INJECTED HERE
_id
title
}
}
`,
variables: {id: "5c9beed4a34c1303f3371a38"} // DECLARED VARIABLE ID
}
axios.post("http://localhost:3344/graphql", body)
.then(res => {
console.info(res.data) // 400 (Bad Request)
})
Объявление типа GRAphQl
type Query {
game(id: String!): Game!
}
Согласно комментариям, я тоже пробовал это. Но все еще не работает
let body = {
query: `
query {
Game($id: String!) {
game(id: $id) {
_id
title
}
}
}
`,
variables: {id: "5c9beed4a34c1303f3371a38"}
}


Вы не передаете переменную id в своем запросе, вы должны определить ее на уровне запроса, как это
let body = {
query: `
query ($id: ID) {
game(id: $id) { // IT SUPPOSE THE ID VARIABLE SHOULD BE INJECTED HERE
_id
title
}
}
`,
variables: {id: "5c9beed4a34c1303f3371a38"} // DECLARED VARIABLE ID
}
ПРИМЕЧАНИЕ. Ваш тип должен совпадать с бэкэндом, например ID или String.
Можете ли вы сказать мне, какой у вас тип идентификатора на API? если это тип идентификатора, вы должны написать его здесь.
я добавил пример типа.
вы пробовали это с запросом ($id: String!), потому что ! необходимо
измените объявление типа на:
type Query {
game(id: ID!): Game!
}
тогда:
const query = `query Game($id: ID!) {
game(id: $id) {
id
title
}
}`;
axios.post("http://localhost:3344/graphql",
body: JSON.stringify({
query,
variables: { id: "5c9beed4a34c1303f3371a38" },
})
).then(res => {
console.info(res.data)
})
но в game(id: ID!) тип идентификатора - это строка
@roll, какой тип id в вашем определении типа? type Game { id: ID! ... например, тип здесь ID, если это так, вам нужно изменить определение запроса с game(id: String!): Game! на game(id: ID!): Game!, иначе изменить запрос с клиента на const query = `query Game($id: String!) { ...
Спасибо, ваш пример был наиболее близок к решению.
Спасибо всем, наконец-то я нашел способ решить проблему.
Может кому еще понадобится.
Определение типа
type Query {
game(id: String!): Game!
}
Запрос должен быть таким
let body = {
query: `
query Game($id: String!) { // notice the query Game structure
game(id: $id) {
_id
title
}
}`,
variables: {id: "5c9beed4a34c1303f3371a38"}
}
axios.post("http://localhost:3938/api/v1/graphql", body)
.then(res => {
console.info(res.data)
})
Я обновил вопрос с объявлением типа. Я попробовал ваш пример, но не работает. Всего с одним изменением
query($id:String)