123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import { ApolloClient } from 'apollo-client'
- import { createHttpLink } from 'apollo-link-http'
- import { InMemoryCache, IntrospectionFragmentMatcher } from 'apollo-cache-inmemory'
- import { ApolloLink } from 'apollo-link'
- import { onError } from 'apollo-link-error'
- import { Message } from 'element-ui';
- import { getCookie, setCookie } from '@/utils/util.js';
- import store from '@/store/index.js';
- import vue from 'vue'
- const httpLink = createHttpLink({
- uri: '/graphql',
- credentials: 'include',
- headers: {
- Authorization: `Bearer ${getCookie('accessToken_devops')}` || null
- }
- })
- const middlewareLink = new ApolloLink((operation, forward) => {
- // operation.setContext({
- // headers: {
- // 'access-token': sessionStorage.getItem('access-token') || null
- // }
- // })
- return forward(operation).map(response => {
- // 结果数据
- return response
- })
- })
- // 拦截错误
- const errorLink = onError(({ networkError, response }) => {
- let errorMsg = '';
- console.log(networkError);
- if (networkError && networkError.statusCode === 401) {
- Message({
- message: '登录已过期,请重新登录',
- duration: 1000,
- type: 'error',
- onClose: function () {
- // 弹窗关闭时,跳转到登录
- setCookie('accessToken_devops', '', -1, '/');
- setCookie('refreshToken', '', -1, '/');
- setCookie('workDate', '', -1);
- window.top.location.href = store.getters.ctx;
- }
- });
- } else {
- if (!!response && response.errors !== undefined && response.errors.length) {
- errorMsg = !response.errors[0].message ? '服务器错误' : response.errors[0].message
- }
- if (networkError) {
- errorMsg = networkError.message
- if (networkError.result !== undefined) {
- errorMsg = networkError.result.success === false ? networkError.result.message : networkError.result.error
- }
- }
- if (errorMsg) {
- Message.error(errorMsg);
- }
- }
- })
- const authLink = middlewareLink.concat(httpLink)
- const defaultOptions = {
- watchQuery: {
- fetchPolicy: 'network-only',
- errorPolicy: 'ignore'
- },
- query: {
- fetchPolicy: 'network-only',
- errorPolicy: 'all'
- }
- }
- const fragmentMatcher = new IntrospectionFragmentMatcher({
- introspectionQueryResultData: {
- __schema: {
- types: [
- {
- kind: 'INTERFACE',
- name: 'Document',
- possibleTypes: [
- { name: 'MyInterface1' },
- { name: 'SomeInterface2' }
- ]
- }
- ]
- }
- }
- })
- const apollo = new ApolloClient({
- link: errorLink.concat(authLink),
- cache: new InMemoryCache({ fragmentMatcher }),
- connectToDevTools: true,
- defaultOptions: defaultOptions
- })
- export default apollo
|