【问题标题】:Intercept and customise Apollo GraphQL Errors拦截和自定义 Apollo GraphQL 错误
【发布时间】:2020-12-21 18:03:41
【问题描述】:

我正在使用基于 ApolloError(或派生的)的简单错误处理机制从我的 GraphQL 服务器抛出错误。例如:

throw new AuthenticationError("Token not present in the request");

在这种情况下,客户端会收到如下信息:

{
  "errors": [
    {
      "message": "Token not present in the request",
      ...

我想在将响应返回给客户端之前以某种方式拦截这些错误,以便将它们翻译成用户选择的语言。

我该怎么做?

【问题讨论】:

    标签: node.js graphql apollo


    【解决方案1】:

    查看here,您可以将formatError 方法提供给您的ApolloServer 构造函数。

    const server = new ApolloServer({
      typeDefs,
      resolvers,
      formatError: (err) => {
        if (err.message.includes("xyz")) {
          return new Error('Internal server error');
        }
    
        return err;
      },
    });
    

    使用err.originalError进行类型检查

    formatError: (err) => {
        if (err.originalError instanceof AuthenticationError) {
          return new Error('Internal server error');
        }
    
        return err;
      },
    

    【讨论】:

    • 似乎在此方法中无法访问用户上下文。如何个性化它?
    • @Aleks 我不相信您可以通过此方法访问context,您可能会抛出您使用context 属性手动构建的自定义错误......类似于throw new MyError({msg: "", context: ctx})跨度>
    猜你喜欢
    • 2018-11-02
    • 2020-09-26
    • 2013-05-07
    • 1970-01-01
    • 2019-11-13
    • 2021-04-10
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    相关资源
    最近更新 更多