node.js - node - web scraping javascript tutorial
Compruebe la conectividad a Internet en NodeJs (4)
No es tan infalible como sea posible, pero haz el trabajo:
var dns = require(''dns'');
dns.lookupService(''8.8.8.8'', 53, function(err, hostname, service){
console.log(hostname, service);
// google-public-dns-a.google.com domain
});
solo use un simple if(err)
y trate la respuesta adecuadamente. :)
ps .: Por favor, no se moleste en decirme que 8.8.8.8 no es un nombre para ser resuelto, es solo una búsqueda de un servidor DNS de alta disponibilidad de Google. La intención es verificar la conectividad, no la resolución del nombre.
Instalado NodeJS en Raspberry Pi, ¿hay alguna manera de verificar si el rPi está conectado a internet a través de NodeJs?
Si bien la solución de robertklep funciona, está lejos de ser la mejor opción para esto. El dns.resolve
tarda aproximadamente 3 minutos. dns.resolve
tiempo de espera y proporcione un error si no tiene una conexión a Internet, mientras que dns.lookup
responde casi instantáneamente con el error ENOTFOUND
.
Así que hice esta función:
function checkInternet(cb) {
require(''dns'').lookup(''google.com'',function(err) {
if (err && err.code == "ENOTFOUND") {
cb(false);
} else {
cb(true);
}
})
}
// example usage:
checkInternet(function(isConnected) {
if (isConnected) {
// connected to the internet
} else {
// not connected to the internet
}
});
Esta es, de lejos, la forma más rápida de verificar la conectividad a Internet y evita todos los errores que no están relacionados con la conectividad a Internet.
Tuve que construir algo similar en una aplicación NodeJS hace algún tiempo. La forma en que lo hice fue primero usar la función networkInterfaces() es el módulo OS y luego verificar si una o más interfaces tienen una IP no interna.
Si eso fuera cierto, entonces utilicé exec() para comenzar a hacer ping con un servidor bien definido (me gustan los servidores DNS de Google). Al verificar el valor de retorno de exec (), sé si el ping fue exitoso o no. Ajusté el número de ping según el tipo de interfaz. Bifurcar un proceso introduce algunos gastos generales, pero como esta prueba no se realiza con demasiada frecuencia en mi aplicación, me lo puedo permitir. Además, al usar ping y direcciones IP, no depende de que se configure el DNS. Aquí hay un ejemplo:
var exec = require(''child_process'').exec, child;
child = exec(''ping -c 1 128.39.36.96'', function(error, stdout, stderr){
if(error !== null)
console.log("Not available")
else
console.log("Available")
});
Una manera rápida y sucia es verificar si Node puede resolver www.google.com
:
require(''dns'').resolve(''www.google.com'', function(err) {
if (err) {
console.log("No connection");
} else {
console.log("Connected");
}
});
Esto no es totalmente infalible, ya que su RaspPi puede conectarse a Internet pero no puede resolver www.google.com
por algún motivo, y es posible que también desee verificar err.type
para distinguir entre "no se puede resolver" y "no se puede resolver". conéctese a un servidor de nombres para que la conexión sea inactiva '').