拦截和自定义 Apollo GraphQL 错误

Intercept and customise Apollo GraphQL Errors

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

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

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

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

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

我该怎么做?

寻找 here 您可以为 ApolloServer 构造函数提供 formatError 方法。

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

    return err;
  },
});

Use err.originalError to do type checking

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

    return err;
  },