Apollo客户端发送OPTIONS而不是GET HTTP方法

时间:2018-10-26 16:11:17

标签: javascript meteor graphql apollo-client

我无法理解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/才能成功执行查询。

我在做什么错了?

1 个答案:

答案 0 :(得分:8)

选项请求可能是preflight requestCORS

  

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