Apollo 错误不包含有效载荷

时间:2021-03-27 16:31:20

标签: graphql apollo apollo-client

在客户端捕获服务器错误。我正在传递一个带有 Apollo 错误的对象,从中我了解到出了什么问题。我在整个项目中一直在使用这种方法,它工作正常,但由于某种原因,在这个特定的例子中,它没有。我没有做任何不同的事情,但有效载荷不存在。

服务器代码:

const { UserInputError } = require('apollo-server-express');

const commentResolver = {
  Mutation: {
    createComment: async (_, { postID, body }, context) => {
      const user = checkAuth(context);
      // empty error object I fill with messages and pass it with the error
      const errors = {};

      try {
        if (body.trim() === '') {
          errors.body = 'Comments must not be empty';
          throw new UserInputError('Empty comment', { errors });
        }
      // ...more code

客户端代码:

const [submitComment] = useMutation(CREATE_COMMENT, {
    variables: {
      postID,
      body: comment,
    },
    onError: (err) => {
      console.log(err.graphQLErrors[0].extensions.exception.errors);   // prints undefined
      setErrors(err.graphQLErrors[0].extensions.exception.errors);
    },

仅打印 err 对象时得到的结果: no errors field in it

1 个答案:

答案 0 :(得分:0)

事实证明,错误是在 try/catch 块中抛出的,该块捕获并抛出通用 nodejs 错误而不是 apollo 错误。因此,将错误类型从 Error 更改为 ApolloError 就成功了。

try {
  // ...code 
} catch {
  throw new ApolloError('InputValidationError', 'INVALID_INPUT', {
      errors,
    });
}

另一种有效的方法是简单地将错误抛出块之外。