Estoy intentando enviar una solicitud de publicación a http://localhost:5000/run. Si el servidor no se está ejecutando, intente lanzar "Por favor, vuelva a intentarlo" al cliente.
try{ const {data} = await axios.post("http://localhost:5000/run",payload); setOutput(data.output); } catch ({ response }) { if (response) { const errMsg = response.data.err.stderr; setOutput(errMsg); } else { setOutput("Please retry submitting."); } }cuando el servidor está funcionando correctamente, se recibe un error, pero no cuando el servidor está fuera de línea. ¿Falta algo en el código?
Por favor, prueba este código:
import axios from "axios"; import {AxiosError} from 'axios'; axios .post("http://localhost:5000/run", payload) .then((response) => setOutput(response.data.output)) .catch((error) => { if (!error?.response) { setOutput("No Server Response"); } else if (error?.code === AxiosError.ERR_NETWORK) { setOutput("Network Error"); } else if (error.response?.status === 404) { setOutput("404 - Not Found"); } else if (error?.code) { setOutput("Code: " + error.code); } else { setOutput("Unknown Error"); } }); Puede usar axios.isAxiosError(error) para asegurarse de que el error sea del tipo AxiosError.
Tipos de errores de Axios:
static readonly ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS"; static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION"; static readonly ERR_NETWORK = "ERR_NETWORK"; static readonly ERR_DEPRECATED = "ERR_DEPRECATED"; static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE"; static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST"; static readonly ERR_CANCELED = "ERR_CANCELED"; static readonly ECONNABORTED = "ECONNABORTED"; static readonly ETIMEDOUT = "ETIMEDOUT";Debe intentar usar response.response.data.error para mostrar el error en su caso en lugar de response.data.err.stderr . Así que aquí está obteniendo datos de error de la respuesta:
try{ const {data} = await axios.post("http://localhost:5000/run",payload); setOutput(data.output); } catch ({ response }) { if (response) { const errMsg = response.response.data.error; setOutput(errMsg); } else { setOutput("Please retry submitting."); } }Discusión de referencia aquí .
Aquí está la solución que funcionó. Gracias a todos por sus aportes
try{ const {data} = await axios.post("http://localhost:5000/run",payload); setOutput(data.output); } catch (error) { if (error.response.data) { setOutput(error.response.data.err.stderr); } else { setOutput("Error connecting to server!"); } }