как проверить интернет-соединение в node.js, электронном - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь обнаружить интернет-соединение в node.js и электронном.

мой код уведомляет о подключении к Интернету каждую 1 секунду.

но я хочу показать подключение, когда он подключен, отключен (только при переключении соединения) не каждые 1 секунду.

я могу сделать это в node.js и электронном?

main.js

const dns = require('dns');

function liveCheck() {
    dns.resolve('www.google.com', function(err, addr){
        if (err) {
            notifier.notify(
                {
                    appName: "com.myapp.id",
                    title: "network error",
                    message: "disconnected",
                    icon:"./facebook.png"
                }
            );
        }


 else{
            console.log("connected");
        }
    });
}

setInterval(function() {
    liveCheck()
     },1000);

Ответы [ 4 ]

3 голосов
/ 05 апреля 2019

navigator.onLine не является надежным методом. Так что я нашел утилиту npm, чтобы справиться с этой ситуацией

Установите его npm i check-internet-connected

И используйте это

const checkInternetConnected = require('check-internet-connected');

  const config = {
    timeout: 5000, //timeout connecting to each try (default 5000)
    retries: 3,//number of retries to do before failing (default 5)
    domain: 'apple.com'//the domain to check DNS record of
  }

  checkInternetConnected(config)
    .then(() => {
      console.log("Connection available");          
    }).catch((err) => {
      console.log("No connection", err);
    });
2 голосов
/ 11 марта 2019

Сначала установите internet-available пакет

npm install internet-available  

А потом,

var internetAvailable = require("internet-available");

// Set a timeout and a limit of attempts to check for connection
internetAvailable({
    timeout: 4000,
    retries: 10,
}).then(function(){
    console.log("Internet available");
}).catch(function(){
    console.log("No internet");
});
2 голосов
/ 11 марта 2019

Это работает для меня в последней версии Electron 4.0.8 на macOS, из процесса рендеринга, использующего только Web API:

function notifyUser (event)
{
    let myNotification = new Notification
    (
        "com.myapp.id",
        { body: (event.type === 'online') ? "Internet available" : "No internet" }
    ); 
}
window.addEventListener ('online', notifyUser, false);
window.addEventListener ('offline', notifyUser, false);

Ссылки:

2 голосов
/ 11 марта 2019

Если вы сохраняете ту же логику, вам нужно добавить флаг, чтобы увидеть, переключились ли вы с соединения на соединение. Я сделал это с isConnected флаг:

const dns = require("dns");
let isConnected = false;

function liveCheck() {
  dns.resolve("www.google.com", function(err, addr) {
    if (err) {
      if (isConnected) {
        notifier.notify({
          appName: "com.myapp.id",
          title: "network error",
          message: "disconnected",
          icon: "./facebook.png",
        });
      }
      isConnected = false;
    } else {
      if (isConnected) {
        //connection is still up and running, do nothing
      } else {
        notifier.notify({
          appName: "com.myapp.id",
          title: "connection gained",
          message: "connected",
          icon: "./facebook.png",
        });
      }
      isConnected = true;
    }
  });
}

setInterval(function() {
  liveCheck();
}, 1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...