我对GraphQL有问题。我想将axios.post请求发送到我的服务器。我可以用邮递员来做:
{
"query":"mutation{updateUserCity(userID: 2, city:\"test\"){id name age city knowledge{language frameworks}}} "
}
和在graphiql中:
mutation {
updateUserCity(userID: 2, city: "test") {
id
name
age
city
knowledge {
language
frameworks
}
}
}
但是不能在我的代码中完成:(((这是我的代码段:
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'
}
})
我的代码有什么问题?
答案 0 :(得分:3)
我喜欢使用以下语法,该语法类似于公认的答案,但更明确。
请注意,variables
对象嵌套在data
对象的内部,并且是query
对象的同级对象。
const data = await axios({
url: API_URL,
method: 'post',
headers: {
'Content-Type': 'application/json',
// any other headers you require go here
},
data: {
query: `
mutation updateUserCity($id: Int!, $city: String!) {
updateUserCity(userID: $id, city: $city){
id
name
age
city
knowledge{
language
frameworks
}
}
}
`,
variables: {
id: 2,
city: 'Test'
}
}
});
答案 1 :(得分:0)
似乎您正在尝试将变量传递到查询中。除非我错了,否则axios调用中的内容和其他内容是不同的。
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'
}
});
假设您在此调用之前定义了变量id
和city
,我认为这应该可行。
答案 2 :(得分:0)
要在请求中传递的query
参数的值必须为字符串,并且传递给GraphQL查询的变量名称应以$
为前缀。您已在请求中将字符串文字用于变量。此外,可以使用variables
键在发布请求中传递变量。
将您的代码更改为如下所示应该可以使其正常工作:
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'
}
})
答案 3 :(得分:0)
我想与您分享我的简单工作示例
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);
});
答案 4 :(得分:0)
对于WordPress GQL https://docs.wpgraphql.com/getting-started/posts/ 现在,使用Nuxt,这似乎对我有用
async asyncData() {
const data = {
query: `query GET_POSTS($first: Int) {
posts(first: $first) {
edges {
node {
postId
title
excerpt
date
content
author {
node {
username
}
}
}
}
}
}`,
variables: {
first: 5
}
}
const options = {
method: 'POST',
headers: { 'content-type': 'application/json' },
data: data,
url: 'http://localhost/graphql'
};
try {
const response = await axios(options);
console.log(response.data.data.posts.edges);
console.log(response.data.data.posts.edges.length);
} catch (error) {
console.error(error);
}
},