Estoy usando Node.js 7.8.0 y estoy tratando de enviar una solicitud HTTP a algún host, a veces el host deseado no existe. En tal caso, recibo el siguiente mensaje:
events.js:163 throw er; // Unhandled 'error' event ^ Error: getaddrinfo ENOTFOUND js.js js.js:80 at errnoException (dns.js:28:10) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:73:26) Press any key to continue... donde js.js es la demostración de host inexistente. Es importante tener en cuenta que todo funciona correctamente si envío la misma solicitud al host existente.
El problema es que este error provoca el bloqueo de mi aplicación Node.js, mientras que necesito mantener la aplicación en ejecución.
Ya verifiqué, mi solicitud HTTP no contiene http / https / port en el campo de host .
Traté de usar los enfoques try/catch , domains y res.on('error', exitHandlerCB) , nada funciona. La única forma que funcionó para mí es process.on('uncaughtException', exitHandlerCB); , pero este lleva a la detención de mi aplicación Node.js.
¿Hay alguna forma de detectar el error debido a una solicitud a un host no existente y continuar con el flujo de la aplicación?
¿Hay alguna forma de detectar el error debido a una solicitud a un host no existente y continuar con el flujo de la aplicación?
Sí, lo que necesita es escuchar el evento de error en el objeto de solicitud. El código de ejemplo sería:
let http = require('http'); let clientRequest = http.get({ hostname: 'www.not-exist-i9io90o9i8.com', port: 80, path: '/' }, function (res) { console.log(res); }); clientRequest.on('error', function(){ console.log('error handler'); }); //...further operationSegún el documento http de Node.js :
Si se encuentra algún error durante la solicitud (ya sea con la resolución de DNS, errores de nivel de TCP o errores de análisis HTTP reales), se emite un evento de 'error' en el objeto de solicitud devuelto. Al igual que con todos los eventos de 'error', si no se registran oyentes, se generará el error.
El error detectado en su caso es un error with DNS resolution .