<p>apollo-link-error: graphQLErrors ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•ญ์ƒ ์ •์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.</p>

์— ๋งŒ๋“  2018๋…„ 01์›” 19์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: apollographql/apollo-link

์˜๋„ํ•œ ๊ฒฐ๊ณผ: ์ฝ˜์†”์— graphQLError ๋ฉ”์‹œ์ง€ ๋กœ๊น…

์‹คํŒจํ•œ ์ฟผ๋ฆฌ์—์„œ ๋ฐ˜ํ™˜๋œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” graphQLErrors ๊ฐ€ ํ•ญ์ƒ ์ •์˜๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— onError() ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์ง€๋งŒ ํ•ญ์ƒ networkError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํฌ๋กฌ์˜ ๋„คํŠธ์›Œํฌ ํƒญ์—์„œ ์‘๋‹ต ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์‹คํŒจํ•œ ์š”์ฒญ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

// Log errors
const errorLink = onError(({ graphQLErrors, networkError }) => {
  if (graphQLErrors)
    graphQLErrors.map(({ message, locations, path }) =>
      console.log(
        `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`
      )
    );
  if (networkError) console.log(`[Network error]: ${networkError}`);
});

// Combine all links
const link = split(
  // split based on operation type: subscription or query/mutation
  ({ query }) => {
    const { kind, operation } = getMainDefinition(query);
    return kind === 'OperationDefinition' && operation === 'subscription';
  },

  // Subscriptions Link
  from([
    // Log Apollo operations in development
    ...(__DEV__ ? [apolloLogger] : []),

    // Handle subscriptions, log errors in dev
    ...(__DEV__ ? [errorLink.concat(subscriptionsLink)] : [subscriptionsLink]),
  ]),


  // Uploads/http Link
  from([
    // Log Apollo operations in development
    ...(__DEV__ ? [apolloLogger] : []),

    // Handle http/file uploads, log errors in dev
    ...(__DEV__ ? [errorLink.concat(uploadLink)] : [uploadLink]),
  ]),
);

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด์— ๋Œ€ํ•œ ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  4 ๋Œ“๊ธ€

์—ฌ๊ธฐ์— ๊ฐ™์€ ๋ฌธ์ œ. ์šฐ๋ฆฌ๋Š” ์ „์—ญ onError ํ•จ์ˆ˜๋ฅผ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ ๋ชจ๋“  subscribeToMore ํ•จ์ˆ˜์— onError ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

this.unsubscribe = data.subscribeToMore({
        document: ...,
        variables: {...}       
        updateQuery: (previous, { subscriptionData }) => {
          ...
        },
        onError: err => {
          console.log({ err })
        },
      })

@goldo ์ •ํ™•ํžˆ, ๊ทธ ํŒจํ„ด์€ ์ •๋ง๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๊ธฐ๋กํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ž˜ ํ™•์žฅ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์˜ค๋ฅ˜ ๋งํฌ์ž…๋‹ˆ๋‹ค!

๋ฌธ์„œ ์— ๋Œ€ํ•ด ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ

const withDataAndErrors = graphql(MY_MIXED_QUERY, {
  options: {
    errorPolicy: 'all'
  }
});

์ฟผ๋ฆฌ๋ณ„ ์˜ค๋ฅ˜ ์ •์ฑ…์ด onError() ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š” ๋ฐฉ์‹์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์˜ค๋ฅ˜ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด GraphQL-Tools/Apollo Server์— ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@tim-soft ์‚ฌ์šฉ ์ค‘์ธ fetch ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ HTTP 400 ์ƒํƒœ๋ฅผ ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜๋กœ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๋Ÿฐ ๋ช‡ ๊ฐ€์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ชจ๋“ˆ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰