Примечание: Проблема заключалась в том, что graphql-middleware-sentry не пересылал сообщения об ошибках. Решение ниже и помечено как правильный ответ.
В настоящее время я работаю с формой, используя React и Apollo React Hooks на внешнем интерфейсе, а также смесь GraphQL-Yoga и Prisma на внутреннем интерфейсе. Мутация работает нормально, и форма в порядке. Но я не могу получать ошибки, выдаваемые бэкэндом в 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',
}
}