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

Vla*_*vić 5 javascript meteor graphql apollo-client

我无法理解Apollo Client库,因为它无法按预期工作.它不是发送GETHTTP方法,而是发送OPTIONSHTTP方法,即使我只在从GraphQL服务器检索数据时才使用GET.

const client = new ApolloClient({
    link: ApolloLink.from([
        new MeteorAccountsLink(),
        new HttpLink({
            uri: 'https://selo-comments.herokuapp.com/graphql',
            useGETForQueries: true
        })
    ]),
    cache: new InMemoryCache()
});
Run Code Online (Sandbox Code Playgroud)

来自浏览器的控制台日志: 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查询该URL或只是使用浏览器的地址栏导航到该URL,您将获得GraphQL数据.我必须使用https://cors-anywhere.herokuapp.com/才能成功执行查询.

我究竟做错了什么?

JOS*_*Ftw 13

该方案要求可能是预检要求的CORS.

CORS预检请求是一个CORS请求,用于检查CORS协议是否被理解.它是一个OPTIONS请求,使用三个HTTP请求标头:Access-Control-Request-Method,Access-Control-Request-Headers和Origin标头.

您可能需要配置服务器以允许跨源调用.

也许你可以在这里找到一些灵感来开始你.允许对Heroku上的Express/Node.js应用程序发出CORS REST请求