注意:问题出在graphql-middleware-sentry无法转发错误。解决方案在下面,并标记为正确答案。
我目前正在使用前端使用React和Apollo React Hooks以及后端使用GraphQL-Yoga和Prisma的混合物来处理表单。突变效果很好,形式还可以。但是我无法收到React后端抛出的错误。
我尝试了各种错误类型,但是运气不太好。例如,我在react中的突变如下所示:
const [requestPasswordResetMutation, { data, error, loading }] = useMutation(
REQUEST_PASSWORD_REQUEST,
{
errorPolicy: 'all',
},
)
在后端,我可能想抛出一个无法识别电子邮件地址的错误。我运行一个简单的检查,例如:
if (!user) {
throw Error('User not found')
}
此错误已被Sentry成功触发并获取。但是errors
变量中的前端未检测到错误。相反,表单的行为就好像已成功提交(假设errors
对象中没有值。
任何人都可以给我一个指示,指示我如何在此处将错误从后端传递到前端吗?
解析器代码:
const requestPasswordReset = async (parent, { email }, context) => {
const user = await context.prisma.user({
email,
})
if (!user) {
throw new Error('User not found')
}
const passwordResetToken = crypto.randomBytes(20).toString('hex')
const passwordTokenExpiry = expiryDate()
try {
await context.prisma.updateUser({
data: {
passwordResetToken,
passwordTokenExpiry,
},
where: {
email: user.email,
},
})
} catch (error) {
console.error(error)
}
if (process.env.NODE_ENV === 'production') {
// Send email
}
return {
message: 'Reset token sent',
}
}
答案 0 :(得分:2)
graphql-middleware-sentry
的{{1}}参数默认为forwardErrors
。您应该将其设置为false
,以防止它吞下您抛出的错误:
true