gpt4 book ai didi

reactjs - 无法使用 graphql-middleware-sentry 从 GraphQL 接收错误

转载 作者:行者123 更新时间:2023-12-05 03:57:30 26 4
gpt4 key购买 nike

注意:问题出在 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,
...
})

关于reactjs - 无法使用 graphql-middleware-sentry 从 GraphQL 接收错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58449715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com