3

我正在使用 apollographql/graphql-server。服务器响应如下所示:

{"data":{...},"errors":[{"message":"...","locations":...}]}

我有两个问题:

  1. 我发现我可以抛出或返回一个 Error 对象,它将被推送到响应的错误数组中,但是一旦我这样做,就会发送响应。如何返回多个错误?

  2. 错误数组是否应该仅用于应用程序或服务器错误,例如错误?数据检查和验证错误是否应该放在数据对象中?

提前致谢!

4

2 回答 2

1
  1. 如果您需要为响应返回多个错误,您很可能需要自己构建一组错误,然后在准备好时返回 graphql 错误。我在我的代码中做了类似的事情。虽然大多数时候,如果我遇到错误,我还是想把它停在那里,并将问题返回给客户。

  2. 对于您来说,典型的“快乐路径”之外的任何内容都是您想要返回错误的 graphql 错误。您的客户端代码将依赖该数据,因此您希望您的客户端能够响应服务器上发生的意外问题。已解析或空的结果集是唯一正常传回且不会出错的内容。其他任何事情,缺少参数、数据库错误等,您都会想要返回错误。

希望有帮助!:)

于 2017-02-15T15:08:05.427 回答
0

看看这个:https ://github.com/thebigredgeek/apollo-errors

从他们的自述文件中:

创建一些错误:

import { createError } from 'apollo-errors';

export const FooError = createError('FooError', {
  message: 'A foo error has occurred'
});

连接格式:

import express from 'express';
import bodyParser from 'body-parser';
import { formatError } from 'apollo-errors';
import { graphqlExpress } from 'apollo-server-express';
import schema from './schema';

const app = express();

app.use('/graphql',
  bodyParser.json(),
  graphqlExpress({
    formatError,
    schema
  })
);

app.listen(8080)

抛出一些错误:

import { FooError } from './errors';

const resolverThatThrowsError = (root, params, context) => {
  throw new FooError({
    data: {
      something: 'important'
    }
  });
}
于 2017-10-11T01:24:56.370 回答