【发布时间】:2021-09-09 00:11:38
【问题描述】:
我有一个 Apollo GraphQL 服务器,我只想报告内部服务器错误(而不是扩展 ApolloError 的错误,如 AuthenticationError、UserInputError 等)。
这是我编写的用于捕获内部服务器错误并报告它们的插件:
const errorReportingPlugin = {
requestDidStart(_) {
return {
didEncounterErrors(ctx) {
// If we couldn't parse the operation, don't do anything
if (!ctx.operation) return
for (const err of ctx.errors) {
// Don't report errors extending ApolloError like AuthenticationError, UserInputError, etc.
if (err instanceof ApolloError) {
continue
}
// report error here...
}
}
}
}
}
但是,当我抛出 AuthenticationError 时,err instanceof ApolloError 返回 false,它扩展了 ApolloError。
所以我尝试通过打印构造函数名称来检查err 的class,并得到GraphQLError。
console.log(err.constructor.name)
有谁知道如何避免报告扩展 ApolloError 的所有错误?
【问题讨论】:
-
@xadm 我不想省略堆栈跟踪。我正在尝试在发生内部服务器错误时向自己发送电子邮件,但在发生扩展
ApolloError的错误时不会。 -
你读过这个吗? ... from this page 'formatError (a GraphQLError) 收到的错误实例包含 originalError 属性'
标签: graphql apollo-server