我正在通过XHR从GraphQLHub请求数据:
const query = '{ reddit { subreddit(name: "movies"){ newListings(limit: 2) { title comments { body author { username commentKarma } } } } } }';
const xhr = new XMLHttpRequest();
xhr.open("get", 'https://www.graphqlhub.com/graphql?query=' + encodeURIComponent(query), true);
xhr.responseType = "json";
xhr.onload = () => console.log(xhr.response);
xhr.send();
这有效。但是我尝试像这样将其转换为axios:
const query = '{ reddit { subreddit(name: "movies"){ newListings(limit: 2) { title comments { body author { username commentKarma } } } } } }';
axios({
url: "https://www.graphqlhub.com/graphql",
method: "get",
data: {
query: encodeURIComponent(query)
}
}).then((result) => {
console.log(result.data);
});
但是我收到此错误:
Uncaught (in promise) Error: Request failed with status code 400
语法有问题吗?
答案 0 :(得分:2)
根据文档:
data
是要作为请求正文发送的数据。仅适用于请求方法“ PUT”,“ POST”和“ PATCH”。
由于您的请求方法为GET
,因此数据将被忽略。您应该改用params
。我们也不需要编码我们的参数,因为axios已经为我们做到了。
axios({
url: "https://www.graphqlhub.com/graphql",
method: "get",
params: {
query,
}
})
不过,最好改用POST,因为某些服务器不允许根据GET
请求发送变异。
axios({
url: "https://www.graphqlhub.com/graphql",
method: "get",
data: {
query,
}
})
或者更好的是,仅使用Apollo之类的客户端。