apolloserver error handling

1、默认错误处理

const { 
  ApolloServer, 
  gql, 
} = require('apollo-server');

const typeDefs = gql`
  type Query {
    readError: String
  }
`;

const resolvers = {
  Query: {
    readError: (parent, args, context) => {
      fs.readFileSync('/does/not/exist');
    },
  },
};

  如果发生错误后,apollo server会自动向errors数组中添加一个错误信息,apollo server会自动在错误信息中添加一个extensions来显示错误信息。

如果不想显示错误信息,可以在server的构造函数中使用debug:false,或者将运行环境设置为production或者test

2、Codes

在extensions有一个code字段用来显示人可读的状态。

3、Augmenting error details

const { 
  ApolloServer,
  UserInputError,
  gql,
} = require('apollo-server');

const typeDefs = gql`
  type Mutation {
    userInputError(input: String): String
  }
`;

const resolvers = {
  Mutation: {
    userInputError: (parent, args, context, info) => {
      if (args.input !== 'expected') {
        throw new UserInputError('Form Arguments invalid', {
          invalidArgs: Object.keys(args),
        });
      }
    },
  },
};

  增加invalidArgs参数

如果想要自定义错误可以使用

new ApolloError(message, code, additionalProperties);

  

Masking and logging errors

记录错误日志信息。

const server = new ApolloServer({
  typeDefs,
  resolvers,
  formatError: error => {
    console.log(error);
    return new Error('Internal server error');
  },
});

server.listen().then(({ url }) => {
  console.log(`🚀 Server ready at ${url}`);
});

  

posted @ 2018-09-21 13:29  tutu_python  阅读(316)  评论(0)    收藏  举报