Apollo-Server 以干净的方式显示错误

Apollo-Server display errors in a clean mannor

我很确定这个问题是不言自明的。 我正在使用 'apollo-server-core' 3.6.5

我想得到的错误

 {
      "errors": [
        {
          "message": "Syntax Error: Unexpected <EOF>.",
          "locations": [
            {
              "line": 1,
              "column": 1
            }
          ]
        }
      ]
    }

我遇到的错误

{
  "errors": [
    {
      "message": "GraphQL operations must contain a non-empty `query` or a `persistedQuery` extension.",
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "stacktrace": [
            "GraphQLError: GraphQL operations must contain a non-empty `query` or a `persistedQuery` extension.",
            "    at processGraphQLRequest (C:\Users\XXXX\Documents\Github\XXXX-XXX\node_modules\apollo-server-core\src\requestPipeline.ts:204:7)",
            "    at processTicksAndRejections (node:internal/process/task_queues:96:5)",
            "    at async processHTTPRequest (C:\Users\XXXX\Documents\Github\XXXX-XXXX\node_modules\apollo-server-core\src\runHttpQuery.ts:346:24)"
          ]
        }
      }
    }
  ]
}

我最初的想法是将错误解析为一个对象,并像这样映射出任何不需要的东西

 const msg = JSON.parse(error.message).errors.map((err:any) => err = {message: err.message});

但是那是行不通的,因为它没有告诉您错误发生的位置 + 似乎没有必要使用 JSON.parse 然后将其字符串化。

apollo 文档涵盖了错误处理。 https://www.apollographql.com/docs/apollo-server/data/errors/#throwing-errors

您可以像这样创建自定义错误:

import { ApolloError } from 'apollo-server-errors';

throw new ApolloError('My error message', 'MY_ERROR_CODE', myCustomExtensions);