Estoy desarrollando una aplicación y quiero usar el código de estado 400 cuando un usuario envía datos inválidos o incompletos, pero cuando axios recibe un código de estado 400 arroja un error y no puedo obtener la respuesta, simplemente da me aparece un error que incluye la solicitud pero no la respuesta, ¿cómo se supone que debo manejar esto?
const getIdTypes = () => { return axios_instance.get (idTypesUrl) } const getValidIdTypes = async () => { return infoActions.getIdTypes() .then(res => { if (res.status !== 200 && res.status !== 201) { pushToFlasher(res.data) } setValidIdTypes(res.data) }) .catch(err => { if (err.request) { console.log("err:", err.request) } if (err.response) { console.log("err:", err.response) } // pushToFlasher(err.response.data) }) }Puede especificar qué códigos de estado son válidos cuando crea una instancia:
const instance = axios.create({ baseURL: 'some api url', timeout: 1000 * 30, validateStatus: (status) => { return status >= 200 && status < 500 }, })Así que aquí todos los estados entre 200 y 500 se considerarán válidos y no arrojarán un error.
En su caso, solo puede return status === 400
en el bloque catch, puede acceder a la respuesta de error que envía el servidor obteniendo el objeto err.response.data :
const getValidIdTypes = async () => { return infoActions.getIdTypes() .then(res => { if (res.status !== 200 && res.status !== 201) { pushToFlasher(res.data) } setValidIdTypes(res.data) }) .catch(err => { console.log(err.response.data) }) }por ejemplo, si el servidor envía este objeto:
{ status: 400, message: "there is a problem" } puede obtener "mensaje" de esta manera: err.response.data.message