Как проверить, есть ли активное интернет-соединение в Node.js

Хотя вероятность того, что ваш пользователь сделает что-то важное в вашей системе, действие, которое нельзя было бы легко повторить, как раз в тот момент, когда интернет перестает работать, довольно низкое, но это случается. В этот момент ваш пользователь сразу же обвинит вашу систему (и даже больше, если вы не разработали что-то для создания временной резервной копии информации в браузере). В этих случаях очень важно проверить, есть ли активное соединение, прежде чем делать что-то важное, просто чтобы предотвратить плохое время.

В этой статье мы покажем вам, как проверить, есть ли активное подключение к Интернету в Node.js, используя 2 модуля с открытым исходным кодом.

A. Использование модуля internetAvailable

Internet Available — это полезный модуль, позволяющий легко проверить наличие активного интернет-соединения с Node.js. Чтобы установить этот модуль в свой проект, выполните следующую команду на своем терминале:

npm install internet-available

Этот модуль был написан нашим кодом мира. Эта библиотека опирается на dns-socket модуль, используемый для разрешения адреса DNS из домена. Но зачем использовать дополнительный модуль, если Node.js уже предоставляет метод поиска DNS-адреса по умолчанию? Отличный вопрос! Вы правы, Node.js уже предоставляет метод, позволяющий вам достичь этого, однако он не предоставляет способа ограничить время выполнения скрипта. Поэтому мы используем этот дополнительный модуль, который делает все проще и делает это действительно хорошо. Для дополнительной информации проверить документацию или же посетите официальный репозиторий на Github здесь.

Чтобы проверить, есть ли доступное интернет-соединение с этим модулем, вы можете сделать это быстро, используя следующий код:

var internetAvailable = require("internet-available");
internetAvailable().then(function(){
console.log("Internet available");
}).catch(function(){
console.log("No internet");
});

Как видите, все довольно просто и функционально. В случае необходимости его можно настроить, чтобы установить максимальное время выполнения для проверки и общее количество попыток, которые могут быть предприняты, если задача занимает больше, чем необходимо:

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");
});

Если время ожидания истекло, это означает, что нет доступного соединения.

Как упоминалось ранее, internetAvailable разрешает DNS-адрес из домена, а именно google.com, Если вы не хотите использовать этот домен для проверки, вы можете просто изменить его в настройках. В следующем примере показано, как использовать site.com домен вместо домена гугл. Хост и порт можно изменить, однако мы будем использовать стандартные:

var internetAvailable = require("internet-available");
// Make it with a different verification address
internetAvailable({
domainName: "site.com",
port: 53,
host: '8.8.8.8'
}).then(() => {
console.log("Internet available");
}).catch(() => {
console.log("No internet");
});

Кроме того, если с доменом, который вы хотите использовать, есть что-то особенное, вы можете изменить порт проверки DNS и адрес хоста, так как он по умолчанию использует общедоступный DNS Google.

B. Использование модуля isOnline

isOnline — это модуль, который в отличие от internetAvailable, работает в Node.js и браузере (с browserify / webpack) и позволяет вам проверить, есть ли активное подключение к Интернету. В браузере у вас есть navigator.onLine, но это бесполезно, поскольку говорит только о наличии локальной связи, а не о том, доступен ли Интернет.

Чтобы установить этот модуль в свой проект, выполните в терминале следующую команду:

npm install is-online

Этот модуль выполняет несколько запросов к различным бесплатным сервисам, все они работают параллельно:

  • извлекать icanhazip.com через HTTPS
  • запрос myip.opendns.com на OpenDNS (только Node.js)
  • Получить тестовую страницу Apple Captive Portal (только Node.js)

Когда любой из них завершается успешно, возвращаемое Обещание разрешается true и, следовательно, мы можем сделать вывод, что есть подключение к интернету. Для получения дополнительной информации об этой библиотеке, пожалуйста, посетите официальный репозиторий на Github здесь.

Чтобы проверить, есть ли интернет с этим модулем, используйте следующий код (в браузере и с Node.js):

const isOnline = require('is-online');
isOnline().then(online => {
if(online){
console.log("We have internet");
}else{
console.log("Houston we have a problem");
}
});

Эта библиотека позволяет вам установить тайм-аут таким же образом, как предыдущая библиотека делает с ее параметрами Кроме того, вы можете выбрать, какую версию интернет-протокола использовать. Это расширенный параметр, который обычно не требуется устанавливать, но он может оказаться полезным для конкретного утверждения подключения IPv6:

const isOnline = require('is-online');
isOnline({
// Break on 5 seconds
timeout: 5000,
// v4 or v6
version: "v4"
}).then(online => {
if(online){
console.log("We have internet");
}else{
console.log("Houston we have a problem");
}
});
Ссылка на основную публикацию
Adblock
detector