1
resposta

Tratamento de erros - Não consigo pegar mensagem que vem do array

Olá, tenho o código:

try {
    const { errors } = er.response.data;
    const er = errors.map(function(item) {
        return item;
    });
   console.log(er);
   toast.error('Error', {
        onClose: () => {
            setLoading(false);
        },
    });

} catch (error) {
    toast.error('Error', {
        onClose: () => {
            setLoading(false);
        },
    });
}

E este é o meu array de erros que retorna da API:

{
    "email": [
        "The email has already been taken."
    ],
    "url": [
        "The url is empty."
    ]
}

Porém não funciona. O console.log(er); não me retorna os erros. Sabem me dizer o por quê?

1 resposta

Oi Michel!

O retorno da sua API é um objeto e não um array, portanto o código

const { errors } = er.response.data;
    const er = errors.map(function(item) {
        return item;
    });

Não vai funcionar, pois objetos não tem o método map. Para percorrer as chaves do objeto retornado pela API, pode-se usar a função Object.keys

const { errors } = er.response.data;
const keys = Object.keys(errors)
const er = keys.map(function(item) {
        return item;
    });

Agora a variável er terá o valor

[
    ["The email has already been taken."], 
    ["The url is empty."]
]

Sendo assim, cada mensagem pode ser acessada por índices de er.

Espero ter ajudado! Qualquer outra dúvida pode postar aqui!