No entanto, dependendo da api, esse catch(err)
ele não pega corretamente dependendo do erro de retorno da api.
Então sugiro você verificar bem os erros de retorno e tratar ele para que o catch
possa pegar corretamente.
Este retorno abaixo é uma api onde efetuo reset de senha do usuário, não uso try/catch
e sim envio o fetch
para api e ele tem um retorno res.ok
const errorMessages: ErrorMessage = {
'The provided current password is invalid':
'A senha atual fornecida é inválida',
'password must be at least 6 characters':
'A senha deve ter pelo menos 6 caracteres',
'Your new password must be different than your current password':
'Sua nova senha deve ser diferente da sua senha atual.',
}
const res = await fetch(
'/api/auth/reset-password',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
code,
password,
passwordConfirmation: confirmPassword,
}),
},
)
if (!res.ok) {
const data = await res.json()
const translatedMessage = errorMessages[data.error.message]
return
}
startTransition(() => {
router.push('/login')
})
Como a api não retorna em portugues eu tenho essa validação trocando os texto em ingles pelos textos em portugues! Funciona bem aqui para min! Nesse caso o try/catch
mas em outros lugares do meu sistema eu usei eles de boa!
Já em outro lugar no site eu uso try/catch
e funciona numa boa, desde que eu configure para ele exibir a mensagem para usuário que ouve algum problema!
try {
const { jwt, user } = await loginUser({identifier, password})
const userId = user?.id.toString()
document.cookie = cookie.serialize('jwt', jwt, {
path: '/',
maxAge: 30 * 24 * 60 * 60,
})
setSuccessMessage('Login bem-sucedido! Redirecionando...')
setTimeout(() => {
router.push('/academy/dashboard/')
}, 100)
} catch (err) {
console.log(err)
if (err instanceof Error) {
setError(err.message)
} else {
setError('An unknown error occurred')
}
}