Примечание. Проблема заключалась в том, что graphql-middleware-sentry не пересылала сообщения об ошибках. Решение находится ниже и помечено как правильный ответ.
В настоящее время я обрабатываю форму, используя React и Apollo React Hooks на интерфейсе, и смесь GraphQL-Yoga и Prisma на стороне сервера. Мутация работает нормально, и форма в порядке. Но я не могу получать ошибки, выдаваемые серверной частью в React.
Я пробовал различные типы ошибок, но мне не очень повезло. Например, моя мутация в response выглядит так:
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',
}
}
errors
внутри ответа? Вы можете увидеть весь ответ сервера на вкладке Network DevTools вашего браузера. - person Daniel Rearden   schedule 18.10.2019message: 'Reset token sent'
. Вместо этого он возвращает:message: null
. - person roo   schedule 18.10.2019data
выглядит так:{ "message": null }
. Однако ответ сервера может также включать массивerrors
в дополнение к объектуdata
. Поэтому я спрашиваю, есть ли в ответе массивerrors
, и если да, то каково его содержимое. Единственный способ проверить это - взглянуть на свои DevTools. - person Daniel Rearden   schedule 18.10.2019{"data":{"requestPasswordReset":null}}
- person roo   schedule 18.10.2019