通过GraphiQL使用Apollo客户端或同构提取

时间:2018-09-25 16:56:16

标签: graphql apollo-client graphiql

我正在尝试将GraphiQL IDE集成到我的网站中,并且想知道我是否可以得到建议,以决定最好使用网站其余部分使用的Apollo客户端还是按照文档中的建议使用同构提取。

如果我使用Apollo客户端,则只需要担心一个连接,而不必考虑确保身份验证正确,但是代码更复杂。

我有这段代码可用于fetcher函数,但到目前为止,它仅适用于查询,而且据我所知,还需要大量工作才能处理突变。

graphQlFetcher = (params) => {
    return this.props.client.query({
        query: gql`
            ${params.query}
        `
    }).then(function(result) {
        return result;
    });
}

或者,有一种同构的获取方法,但是要使其正常工作,我需要首先获取身份验证令牌,并且我对使该工作可行的承诺还不够。无效的代码:

import { Auth } from 'aws-amplify';

getToken = async () => {
    const session = await Auth.currentSession();
    return session.accessToken.jwtToken;
}

graphQLFetcher = (graphQLParams) => {
    return getToken().then(function(token) {
        fetch(window.location.origin + '/graphql', {
            method: 'post',
            headers: { 
                  'Content-Type': 'application/json',
                  "Authorization": token
              },
            body: JSON.stringify(graphQLParams),
          }).then(response => response.json());
    })
}

意识到有两种方法可以解决此问题,并且与技术问题一样,这是一个设计问题,但希望有人能帮助我。

1 个答案:

答案 0 :(得分:0)

第一个很好,但是那里有一些多余的语法。这就是我用的:

params => client.query({ ...params, query: gql(params.query) });