J’ai installé NodeJS sur Raspberry Pi, existe-t-il un moyen de vérifier si le Raspberry Pi est connecté à l’internet via NodeJs ?
Un moyen rapide et pratique est de vérifier si NodeJs peut résoudre www.google.com
:
require('dns').resolve('www.google.com', function(err) {
if (err) {
console.log("Pas de connexion");
} else {
console.log("Connecté");
}
});
Ce n’est pas totalement sûr, puisque votre RaspPi peut être connecté à l’Internet mais incapable de résoudre www.google.com
pour une raison quelconque, et vous pourriez aussi vérifier err.type
pour faire la différence entre ‹ ne peut être résolue › et ‹ ne peut pas se connecter à un serveur de noms, la connexion peut donc être interrompue ›).
Bien que la solution de @Isaac fonctionne, elle est loin d’être le meilleur choix pour cela. Il faut environ 3 minutes à dns.resolve
pour dépasser le temps imparti et donner une erreur (timeout) si vous n’avez pas de connexion internet, alors que dns.lookup
répond presque instantanément avec l’erreur ENOTFOUND
.
J’ai donc créé cette fonction :
function checkInternet(cb) {
require('dns').lookup('google.com',function(err) {
if (err && err.code == "ENOTFOUND") {
cb(false);
} else {
cb(true);
}
})
}
// exemple d utilisation:
checkInternet(function(isConnected) {
if (isConnected) {
// connecté à l'internet
} else {
// n'est pas connecté à Internet
}
});
C’est la méthode la plus rapide pour vérifier la connectivité à l’internet et elle évite toutes les erreurs qui ne sont pas liées à la connectivité à l’internet.
Ce n’est pas aussi sûr que possible, mais cela permet de faire le boulot :
var dns = require('dns');
dns.lookupService('8.8.8.8', 53, function(err, hostname, service){
console.log(hostname, service);
// ....
});
il suffit d’utiliser un simple if(err)
et de traiter la réponse de manière adéquate
ps. : Ne me dites pas que 8.8.8.8 n’est pas un nom à résoudre, c’est juste un serveur dns hautement disponible de google. L’objectif est de vérifier la connectivité, pas la résolution de noms.
Voici un exemple, dans une seule ligne : (Node 10.6+)
let cnx = !!await require('dns').promises.resolve('google.com').catch(()=>{});