我正在开发一个开放源代码,其中我已针对所有可能的情况(开发人员/操作错误)实施错误处理
例如使用包装器处理异步/等待错误:
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中遇到类型错误,并且服务器不会崩溃。