【问题标题】:Should I throw generic error in GraphQL Scalar?我应该在 GraphQL Scalar 中抛出一般错误吗?
【发布时间】:2019-10-13 13:15:20
【问题描述】:

我正在尝试在 GraphQL 和 graphql-yoga 中为服务器定义标量类型。问题是我正在尝试决定在这种情况下我应该抛出 GraphQLError 还是只抛出 TypeError

目前,我正在使用通用错误。

export const URIScalar = new GraphQLScalarType({
  name: 'URI',
  description: 'A URI whose scheme is \'http\' or \'https\'',
  serialize(value) {
    if (isURI(value)) {
      return value;
    } else {
      throw new Error('URI format is invalid');
    }
  },
  parseValue(value) {
    if (isURI(value)) {
      return value;
    } else {
      throw new Error('URI format is invalid');
    }
  },
  parseLiteral(ast) {
    if (ast.kind === 'StringValue') {
      if (isURI(ast.value)) {
        return ast.value;
      } else {
        throw new Error('URI format is invalid');
      }
    } else {
      throw new Error('URI type must be string');
    }
  },
});

【问题讨论】:

  • 最好创建易于调试的自定义错误

标签: javascript error-handling graphql graphql-js


【解决方案1】:

一般错误是完美的,因为其中的信息是有用的。

客户端将按预期收到错误,您将能够在您的软件中找到错误的来源。

当您需要更多与之相关的数据时,自定义错误非常有用,但您所拥有的将起作用。

【讨论】:

  • 其中一个问题,我发现graphql-yoga 在后台使用apollo-server,它会抛出错误但也会返回HTTP 400 来解析和验证GraphQL 标量类型。代码在这里github.com/apollographql/apollo-server/blob/…。这不违反 GraphQL 不搞乱 HTTP 代码的最佳实践吗?
  • 那是意料之中的,这到底是一个验证问题。我一直在 apollo-server 中使用相同的模式,零问题。
猜你喜欢
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 2011-07-15
  • 2013-05-20
  • 1970-01-01
相关资源
最近更新 更多