GraphQl Apollo服务器进行Express.js错误处理

时间:2019-02-27 11:03:59

标签: express error-handling graphql apollo-server

我正在开发一个开放源代码,其中我已针对所有可能的情况(开发人员/操作错误)实施错误处理

例如使用包装器处理异步/等待错误:

const asyncMiddleware = fn => (req, res, next) =>
  Promise.resolve(fn(req, res, next)).catch(err => {
    if (!err.isBoom) return next(boom.badImplementation(err));
    next(err);
  });

内部错误会传递给next here

提供了有关如何实现错误处理的更多详细信息。

现在,我在GraphQl中添加了ApolloServer和Prisma,我可以使用async突变。但是,我注意到的是,如果使用上面的asyncMiddleware包装器包装一个异步函数,并从await引发错误,则GraphQl Playground会显示类型错误而不是实际错误。我希望服务器在这种情况下崩溃,但是这不会发生,因为错误根本无法到达我的自定义错误处理程序,在错误处理程序中我检查错误isDeveloper并退出该过程。要将错误传递给自定义错误处理程序,我需要访问next函数。

初始化ApolloServer时,我试图将next传递给上下文:

context: (req, res, next )

但是这似乎不起作用。至少通过将错误传递给context.next(err),我仍然在GraphQl Playground中遇到类型错误,并且服务器不会崩溃。

0 个答案:

没有答案