reactjs - 无法使用 graphql-middleware-sentry 从 GraphQL 接收错误
问题描述
注意:问题在于 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',
}
}
解决方案
graphql-middleware-sentry
有一个默认的forwardErrors
参数false
。您应该将其设置为true
以防止它吞下您抛出的错误:
const sentryMiddleware = sentry({
forwardErrors: true,
...
})
推荐阅读
- spring - 如何创建从实体到 dto 的映射器,其中 dto 嵌套在哪里?
- flutter - 在颤振项目中添加另一个语言环境时出现 MaterialLocalization 错误
- python - 对 DataFrame 的一列求和重复的子集行条件
- javascript - 删除带有事件的项目
- java - 从 Spring RequestDumperFilter 中消除敏感标头
- mysql - 从 Mysql 到 Postgresql 的 Pentaho 中的错误“用于编码 UTF-8 的字节序列无效:0x00”
- media-queries - 在其他js中导出断点时媒体查询有什么问题?
- python - 使用VS Code按行(f10)运行的jupyter笔记本出现问题
- node.js - 跨级别填充猫鼬并显示某些字段
- python - 如何导入 FastAPI 应用程序文件夹以满足 pycharm 和 pylint?