Apollo-link: рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-рддреНрд░реБрдЯрд┐ onError () рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪрдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 6 рдЕрдкреНрд░реИрд▓ 2018  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: apollographql/apollo-link

рдирдорд╕реНрддреЗ,

рдореИрдВрдиреЗ рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рдкрд░ рдХрдИ рджрд┐рди рдмрд┐рддрд╛рдП рд╣реИрдВред

рдХреНрд▓рд╛рдЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрд░реНрдЯрд░рд╡реЗрдпрд░ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ рддреЛ рдореИрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

const client = location => new ApolloClient({
  link: ApolloLink.from([
    onError(({ graphQLErrors, networkError }) => {
      if (graphQLErrors && graphQLErrors.find(isUnauthorized) && !location.pathname.startsWith('/login')) {
        client.resetStore();
        client.mutate({ mutation: notificationAddMutation, variables: { text: 'You did not have rights to this operation. Maybe logged out?' } });
      }
      if (networkError) {
        client.mutate({ mutation: notificationAddMutation, variables: { text: 'There was a network problem. Please check your connection' } });
      }
    }),
    withClientState({
      cache,
      defaults,
      resolvers,
      typeDefs,
    }),
    httpLink,
  ]),
  cache,
});

рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ: TypeError: client.mutate рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрд▓рд╛рдЗрдВрдЯ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪреЗ? рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдерд╛рдиреАрдп рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ client рдХреЛ рдПрдХ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЕрдкреЛрд▓реЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

const clientFunction = location => {
  const client = new ApolloClient({
    link: ApolloLink.from([
      onError(({ graphQLErrors, networkError }) => {
        if (
          graphQLErrors &&
          graphQLErrors.find(isUnauthorized) &&
          !location.pathname.startsWith('/login')
        ) {
          client.resetStore();
          client.mutate({
            mutation: notificationAddMutation,
            variables: {
              text:
                'You did not have rights to this operation. Maybe logged out?',
            },
          });
        }
        if (networkError) {
          client.mutate({
            mutation: notificationAddMutation,
            variables: {
              text: 'There was a network problem. Please check your connection',
            },
          });
        }
      }),
      withClientState({
        cache,
        defaults,
        resolvers,
        typeDefs,
      }),
      httpLink,
    ]),
    cache,
  });
  return client;
};

clientFunction(LOCATION);

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ client рдХреЛ рдПрдХ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЕрдкреЛрд▓реЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

const clientFunction = location => {
  const client = new ApolloClient({
    link: ApolloLink.from([
      onError(({ graphQLErrors, networkError }) => {
        if (
          graphQLErrors &&
          graphQLErrors.find(isUnauthorized) &&
          !location.pathname.startsWith('/login')
        ) {
          client.resetStore();
          client.mutate({
            mutation: notificationAddMutation,
            variables: {
              text:
                'You did not have rights to this operation. Maybe logged out?',
            },
          });
        }
        if (networkError) {
          client.mutate({
            mutation: notificationAddMutation,
            variables: {
              text: 'There was a network problem. Please check your connection',
            },
          });
        }
      }),
      withClientState({
        cache,
        defaults,
        resolvers,
        typeDefs,
      }),
      httpLink,
    ]),
    cache,
  });
  return client;
};

clientFunction(LOCATION);

рдЖрдкрдХрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж,

рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред

рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП:
рдореИрдВ рдЖрдлреНрдЯрд░рд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореБрджреНрджреЛрдВ рдореЗрдВ рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкреНрд░рддреНрдпреЗрдХ рдореНрдпреВрдЯреЗрд╢рди рдПрд░рд░ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рддрд░реНрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╢рд╛рдпрдж рдЖрдлреНрдЯрд░рд╡реЗрдпрд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдореНрдпреВрдЯреЗрд╢рди рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

@evans рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИрдВред

рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкреЛрд╕реНрдЯ: https://stackoverflow.com/questions/51664533/how-to-access-apolo-client-in-apolo-link-error-to-resetstore

рдЕрд░реЗ, рдореБрдЭреЗ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ

const graphQLClient = new ApolloClient({
  cache: new InMemoryCache(),
  link: ApolloLink.from([
    authLink(graphQLClient),
    refreshLink(graphQLClient),
    httpLink,
  ]),
})

const authLink = (graphQLClient) => setContext(async (req, { headers }) => { ... }
const refreshLink = (graphQLClient) => onError(({ graphQLErrors, networkError, operation, forward }) => { ... }

рдореИрдВрдиреЗ рд▓рд┐рдВрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд╝рдХреНрдпреВрдПрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд▓рд┐рдВрдХ рдореЗрдВ рдЧреНрд░рд╛рдлрд╝рдХреНрдпреВрдПрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ undefined рд╣реИ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

sandersn picture sandersn  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

steffenmllr picture steffenmllr  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Kisepro picture Kisepro  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bwhitty picture bwhitty  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Morantron picture Morantron  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ