如何在Angular Module和GraphQL查询和转换中实现apollo链接错误?

如何在Angular Module和GraphQL查询和转换中实现apollo链接错误?,graphql,apollo-client,apollo-angular,Graphql,Apollo Client,Apollo Angular,我喜欢阿波罗角形文件中建议的全局设置。我不确定是否要将errorLink放入选项中,或者是否应该将其与httpLink分组 最大的问题是:我如何在代码中使用它?我到处都找不到例子,也不知道如何开始。我脑子里还没有阿波罗链接错误的概念 app.module.ts ... import { ApolloModule, APOLLO_OPTIONS } from 'apollo-angular'; import { HttpLinkModule, HttpLink } from 'apollo-ang

我喜欢阿波罗角形文件中建议的全局设置。我不确定是否要将errorLink放入选项中,或者是否应该将其与httpLink分组

最大的问题是:我如何在代码中使用它?我到处都找不到例子,也不知道如何开始。我脑子里还没有阿波罗链接错误的概念

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);
            }
        });
我也有同样的问题。 Apollo link error就像一个中间件,您可以使用它在代码中的单个位置截获错误,并使用它进行一些通用的错误处理。 如果要将该错误传播到服务或组件,则需要执行额外的步骤: 我注意到错误详细信息将从响应中删除,除非您使用:

apollo.watchQuery({
…,//选项
错误策略:“全部”
});
这样,您就可以检查服务上的响应,并查找“数据”和“错误”。 如果是验证错误,则是带有errors对象的http 200。 然后,您可以将该错误传播到组件,并使用它在表单上显示错误消息

有关更多信息:


希望有帮助

我真的不能说这在角度上下文中是如何工作的,但是错误链接背后的整个思想是做一般的错误处理——也就是说,它是为每个请求运行的逻辑。因此,如果您使用错误链接并在那里处理错误(记录错误、显示对话框等),希望您不必在单个组件内部执行任何额外的错误处理。有关组件内部错误处理的微调,请参阅。一如既往,感谢您的深入了解!我有errorPolicy,但下面这句来自Apollo Angular docs的话引起了我的兴趣:“当使用Apollo Link时,处理网络错误的能力要强大得多。”关于errorLink在我的模块中应该放在哪里,有什么想法吗?阿波罗只是阿波罗的客户。谢谢马特·罗恩,我终于明白了,但忘了回到这篇文章更新它。我很难过。很高兴现在能在这里发布。