我遇到一个问题,当使用来自'apollo-boost'的{ ApolloClient }将自定义标头发送到后端服务器时,我无法指定URI,
因此,我不得不使用来自“ apollo-client”的{ ApolloClient }



这个问题已经解决,但是现在我的变体没有发送到后端了吗?

我的突变:

import { gql } from 'apollo-boost';

export const LOGIN_USER = gql`
  mutation($email: String!, $password: String!) {
    loginUser(email: $email, password: $password) {
      userId
      token
      expiresIn
    }
  }
`


import { ApolloClient } from 'apollo-client';
import { HttpLink } from 'apollo-link-http';
import { setContext } from 'apollo-link-context';
import { InMemoryCache } from 'apollo-cache-inmemory';

const httpLink = new HttpLink({
  uri: 'http://localhost:3001/graphql'
})

const authLink = setContext((_, { headers }) => {
  const store = JSON.parse(sessionStorage.getItem('interdevs-data'));
  const token = store.token;

  return {
    headers: {
      ...headers,
      authorization: token ? `Bearer ${token}` : "",
    }
  }
});

const client = new ApolloClient({
  link: authLink.concat(httpLink),
  cache: new InMemoryCache()
});


  const login = async (email, password) => {
    try {
        const user = await loginUser({
          variables: {
            email,
            password
          }
        });
        const { userId, token, expiresIn } = user.data.loginUser;

        setUserData({
          token: token,
          userId: userId,
          expiresIn: expiresIn
        });

        sessionStorage.setItem('interdevs-data', JSON.stringify({
          "token": token,
          "userId": userId,
          "expiresIn": expiresIn
        }));
    } catch(err) {
      console.log('login error: ', err);
      setLoginErr(err);
    };
  };


这是我得到的错误。

"Error: Network error: Cannot read property 'token' of null"


当我切换回从apollo-boost导入ApolloClient时,它又可以工作了。



任何帮助,不胜感激!

最佳答案

不确定100%,但是我认为错误在于:

const store = JSON.parse(sessionStorage.getItem('interdevs-data'));
const token = store.token;


如果没有任何键为interdevs-data的项目,则store为null。

我认为您可以通过以下方法解决此问题:

const store = JSON.parse(sessionStorage.getItem('interdevs-data'));
const token = store ? store.token : null;

09-28 13:21