我无法理解Apollo客户端库,因为它无法按预期工作。尽管我已经使用了 GET ,但它没有发送 GET
HTTP方法,而是发送了 OPTIONS
HTTP方法。 strong>仅当从GraphQL服务器检索数据时。
const client = new ApolloClient({
link: ApolloLink.from([
new MeteorAccountsLink(),
new HttpLink({
uri: 'https://selo-comments.herokuapp.com/graphql',
useGETForQueries: true
})
]),
cache: new InMemoryCache()
});
来自浏览器的控制台日志:
OPTIONS https://selo-comments.herokuapp.com/graphql?query=%7B%0A%20%20comments(id%3A%20%22TFpQmhrDxQqHk2ryy%22)%20%7B%0A%20%20%20%20articleID%0A%20%20%20%20content%0A%20%20%20%20userId%0A%20%20%20%20createdAt%0A%20%20%20%20commentID%0A%20%20%20%20votes%0A%20%20%20%20blockedUsers%0A%20%20%20%20__typename%0A%20%20%7D%0A%7D%0A&variables=%7B%7D 405 (Method Not Allowed)
这显然意味着HTTP方法不正确,即使该方法在url中具有查询参数也是如此。如果您使用Postman查询该网址,或者只是使用浏览器的地址栏导航至该网址,则将获取GraphQL数据。我必须使用https://cors-anywhere.herokuapp.com/
才能成功执行查询。
我在做什么错了?
答案 0 :(得分:8)
选项请求可能是preflight request的CORS。
CORS预检请求是一种CORS请求,用于检查是否理解CORS协议。 它是一个OPTIONS请求,使用三个HTTP请求标头:Access-Control-Request-Method,Access-Control-Request-Headers和Origin标头。
您可能需要将服务器配置为允许跨源调用。
也许您可以在这里找到一些启发来开始您的学习。 Allow CORS REST request to a Express/Node.js application on Heroku