2

我有一个带有 GraphQL 的快速后端,当我去/graphiql手动执行一些搜索时它可以工作。我的 React 前端正在尝试在后端执行搜索。以下代码应异步执行查询:

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

WhereMY_QUERY是之前定义的,代表一个我知道有效并且已经过测试的查询/graphiql。为了在我的 React 组件中执行此操作,我将其导出为export default withApollo(MyComponent)clientprops.

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. 这个错误是什么意思,我该如何解决?

谢谢!

4

1 回答 1

6

您的客户端配置有一个重复的属性——您首先将该link属性设置为您的HttpLink,然后再次将其设置为您的ErrorLink. 这意味着HttpLink完全忽略了,您只是将 传递ErrorLink给配置。您会看到该错误,因为ErrorLinkcreated byonError本身并不是要使用的。相反,它应该与 the 链接,HttpLink这就是您应该分配给该link属性的内容。

文档中的此页面详细说明了如何正确编写链接。您可以使用concat,但我更喜欢ApolloLink.from它,因为它可以让您清楚地显示链接的顺序:

const errorLink = onError(...)
const httpLink = new HttpLink(...)
const link = ApolloLink.from([
  errorLink,
  httpLink,
])
const client = new ApolloClient({
  link,
  cache,
})
于 2018-10-22T12:42:30.547 回答