Debo estar obteniendo búsquedas antiguas de Google porque no puedo encontrar ningún hilo sobre cómo hacer esto si está utilizando la fetch de JavaScript, no el antiguo XMLHttpRequest
Estoy tratando de probar si mi VM está en línea o no. El resto de la máquina virtual está bloqueado, pero dejé un punto final abierto para realizar pruebas.
Intenté usar el status para verificar si el servidor está activo, pero me dio un error diferente a un error de respuesta:
fetch("https://rockosmodernserver.westus2.cloudapp.azure.com/ ", { method: "GET", }).then(response => response) .then(data => { if (data.status == 200){ console.log("server is up") } else{ console.log("server is down!!") } })Funciona si el servidor está activo, pero si el servidor está inactivo, obtengo:
VM739:1 GET https://rockosmodernserver.westus2.cloudapp.azure.com/ net::ERR_CONNECTION_REFUSED cuando intenté buscar en Google esto, obtuve soluciones para XMLHttpRequest pero no para el módulo fetch.
Si el servidor no responde, fetch lo toma como una connection failure y lo maneja en el bloque catch() . La fetch solo ejecuta los bloques then() cuando la conexión es exitosa. Si la conexión no fue exitosa, se ejecutará el bloque catch() .
fetch('something') .then( response => {}) .catch(error => { // handle error here })Estás buscando un bloque de captura. En el bloque catch puede buscar los errores. Imn el ejemplo a continuación, tiene acceso al objeto de error.
fetch("https://rockosmodernserver.westus2.cloudapp.azure.com/ ", { method: "GET", }).then(response => response) .then(data => { console.log("server is up") }) .catch((error) => { console.error('Error:', error); console.log("server is down!!") });Si un servidor no responde, no puede darte una respuesta. Lo que significa que no hay código de estado.
Actualización: una promesa fetch() se rechazará con un TypeError cuando se encuentre un error de red o CORS esté mal configurado en el lado del servidor, aunque esto generalmente significa problemas de permisos o similares; un 404 no constituye un error de red, por ejemplo. Una verificación precisa de una función fetch() exitosa incluiría verificar que la promesa se resolvió y luego verificar que la propiedad Response.ok tenga un valor de verdadero. El código sería algo como esto:
fetch('flowers.jpg') .then(response => { if (!response.ok) { throw new Error('Network response was not OK'); } return response.blob(); }) .then(myBlob => { myImage.src = URL.createObjectURL(myBlob); }) .catch(error => { console.error('There has been a problem with your fetch operation:', error); });Primera edición: esta solución podría ser útil al usar un tiempo de espera y realizar un seguimiento de ese tiempo de espera. https://stackoverflow.com/a/50101022/13111978