无法通过带有graphql-middleware-sentry的GraphQL接收错误

问题描述 投票:1回答:1

注:问题出在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',
  }
}
reactjs graphql apollo react-apollo prisma
1个回答
2
投票

graphql-middleware-sentryforwardErrors参数默认为false。您应该将其设置为true,以防止它吞下您抛出的错误:

const sentryMiddleware = sentry({
  forwardErrors: true,
  ...
})
© www.soinside.com 2019 - 2024. All rights reserved.