import { ApolloClient } from 'apollo-client';
const apolloClient = new ApolloClient({
  ...
  refreshTokens: async () => {
    // 刷新token代码
  },
  ...
});
import axios from 'axios';
const refreshTokens = async () => {
  const refreshToken = localStorage.getItem('refreshToken');
  try {
    const response = await axios.post('/api/token/refresh', { refreshToken });
    localStorage.setItem('accessToken', response.data.accessToken);
    localStorage.setItem('refreshToken', response.data.refreshToken);
  } catch (error) {
    console.error(error);
  }
};
import { ApolloLink } from 'apollo-link';
import { HttpLink } from 'apollo-link-http';
const httpLink = new HttpLink({
  uri: 'http://localhost:4000/graphql'
});
const authMiddleware = new ApolloLink((operation, forward) => {
  const accessToken = localStorage.getItem('accessToken');
  operation.setContext({
    headers: {
      authorization: accessToken ? `Bearer ${accessToken}` : ''
    }
  });
  return forward(operation).map(response => {
    const context = operation.getContext();
    const { response: { headers } } = context;
    
    if (headers) {
      const accessToken = headers.get('accessToken');
      const refreshToken = headers.get('refreshToken');
      if (accessToken) {
        localStorage.setItem('accessToken', accessToken);
      }
      if (refreshToken) {
        localStorage.setItem('refreshToken', refreshToken);
      }
    }
    return response;
  });
});
const apolloClient = new ApolloClient({
  link: authMiddleware.concat(httpLink),
  ...
});