【发布时间】:2019-12-21 09:03:48
【问题描述】:
我喜欢 apollo-angular 文档中建议的全局设置。我不确定是否将 errorLink 放入选项中,或者是否应将其与 httpLink 分组。
最大的问题是:如何在我的代码中使用它?我在任何地方都找不到示例,也不知道如何开始。我脑子里还没有 apollo-link-error 的概念。
app.module.ts
...
import { ApolloModule, APOLLO_OPTIONS } from 'apollo-angular';
import { HttpLinkModule, HttpLink } from 'apollo-angular-link-http';
import { onError } from 'apollo-link-error';
// This is just a copy and past from the docs at this time.
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}`);
});
@NgModule({
imports: [
...
],
declarations: [
...
],
providers: [
...
{ provide: APOLLO_OPTIONS,
useFactory: (httpLink: HttpLink) => {
return {
cache: new InMemoryCache(),
link: httpLink.create({
uri: 'http://localhost:3000/graphql',
}),
options: {
errorLink
},
defaultOptions: {
}
};
},
deps: [HttpLink]
},
],
})
export class AppModule { }
带有查询的组件:
this.apollo
.watchQuery({
query: getAllMembers,
})
.valueChanges
.subscribe(result => {
if (result !== null) {
this.dataSource.data = result.data['getMembers'];
} else {
// What should be here??? This doesn't seem to work.
console.log('errors ', result.errors);
}
});
【问题讨论】:
-
我无法真正说明这将如何在 Angular 上下文中工作,但错误链接背后的整个想法是进行通用错误处理——即它是为每个请求运行的逻辑。因此,如果您使用错误链接并在那里处理错误(记录它、显示对话框等),您希望不必在单个组件内进行任何额外的错误处理。
-
对于内部组件的微调错误处理,请参阅errorPolicy。
-
一如既往,感谢您的深刻洞察!我有 errorPolicy,但是下面的 Apollo Angular 文档中的这一行 errorPolicy 引起了我的兴趣:“使用 Apollo Link 时,处理网络错误的能力更加强大。”关于 errorLink 应该在我的模块中的位置有什么想法吗? Apollo Angular 只是 Apollo 客户端。
标签: graphql apollo-client apollo-angular