Запросы в Graphiql приводят к ошибкам Apollo forward, это не функция - PullRequest
0 голосов
/ 22 октября 2018

У меня есть экспресс-сервер с GraphQL, который работает, когда я перехожу на /graphiql и вручную выполняю некоторые поиски.Мой интерфейс React пытается выполнить поиск на сервере.Следующий код должен выполнять запрос асинхронно:

const data = await this.props.client.query({
    query: MY_QUERY,
    variables: { initials: e.target.value }
});
console.log(data);

Где MY_QUERY определен ранее и представляет запрос, который, как я знаю, работает и был протестирован на /graphiql.Чтобы сделать это в моем компоненте React, я экспортирую его как export default withApollo(MyComponent), чтобы он имел переменную client в props.

В файле index.js, который я определил через Apollo соединение с /graphiql для выполнения запросов:

//link defined to deal with errors, this was found online
const link = 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}`);
});

//the httpLink to my GraphQL instance, BASE_URL is defined elsewhere
const httpLink = new HttpLink({
    uri: BASE_URL,
    headers: {
    },
});

//here I define the client linking the GraphQL instance, the cache, and error handling
const client = new ApolloClient({
    link: httpLink,
    cache,
    link
});

При выполнении вышеупомянутого запроса без переменной link, которая обрабатывает ошибку, я получаю 400 Bad Request с сервера (ApolloError.js:37 Uncaught (in promise) Error: Network error: Response not successful: Received status code 400).Поскольку это не говорит мне больше, здесь, на StackOverflow и на веб-странице Apollo, я обнаружил приведенное выше объявление об ошибке, которое выдает [Network error]: TypeError: forward is not a function.Что означает эта ошибка и как ее решить?

Спасибо!

1 Ответ

0 голосов
/ 22 октября 2018

У вашей конфигурации клиента есть дублирующее свойство - вы сначала задаете для свойства link значение HttpLink, а затем снова задаете его для ErrorLink.Это означает, что HttpLink полностью игнорируется, и вы только передаете ErrorLink в конфигурацию.Вы видите эту ошибку, потому что ErrorLink, созданный onError, не предназначен для использования сам по себе.Вместо этого он должен быть связан с HttpLink, и это то, что вы должны назначить свойству link.

Эта страница в документации описывает, как правильно составлять ссылки.Вы можете использовать concat, но я предпочитаю ApolloLink.from, поскольку он позволяет четко отображать порядок ваших ссылок:

const errorLink = onError(...)
const errorLink = new HttpLink(...)
const link = ApolloLink.from([
  errorLink,
  httpLink,
])
const client = new ApolloClient({
  link,
  cache,
})
...