GraphQL / Apollo - невозможно получить ошибку NetworkError - PullRequest
0 голосов
/ 25 февраля 2019

Я не могу получить сетевую ошибку с моим клиентом Apollo, только ошибки GraphQL.

У меня настроен клиент так:

    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}`);
});

  const client = new ApolloClient({
    link: ApolloLink.from([
      errorLink,
      new HttpLink({
        uri: 'http://localhost:4000/graphql'
      }),
    ]),
  });

На сервере я делаю запрос, который я анализирую следующим образом:

 .then(res => {
  if (res.ok) {
    return { blah: res.json(), count };
  }
  throw new Error();
})
.catch(error => {
  throw new AuthenticationError('Must Authenticate');
});

Ошибка AuthenicationErrorпросто всплывает к клиенту как ошибка GraphQL ([GraphQL error]: Message: Must Authenticate,, я просто хочу иметь возможность получить код состояния HTTP из запроса на сервер на клиенте.

Спасибо

1 Ответ

0 голосов
/ 28 февраля 2019

Ваша реализация на стороне клиента выглядит правильно.

Я полагаю, вы используете Express с некоторым промежуточным программным обеспечением Graphl для обработки запросов.Главное, что вам нужно будет обработать процесс аутентификации, прежде чем вступит в игру промежуточное ПО graphql.

Таким образом, аутентификация - это мутация graphql, с которой вы работаете напрямую.В моем случае это выглядело примерно так:

...

const app = express();

app.use(
  "/graphql",
  bodyParser.json(),
  (request, response, next) => authenticationMiddleware(request) // authentication is handled before graphql
  .then(() => next())
  .catch(error => next(error)),
  graphqlExpress(request => {
    return {
      schema: executable.schema,
      context: {
        viewer: request.headers.viewer
      },
    };
  }),
);

...

app.listen(...)

Другая возможность заключается в добавлении кода состояния в ответ об ошибке в ошибках graphql.Но это зависит от используемого вами пакета npm.например, formatError в apollo-server-graphql https://www.apollographql.com/docs/apollo-server/api/apollo-server.html#constructor-options-lt-ApolloServer-gt

...