本文概述
- A.使用internetAvailable模块
- B.使用isOnline模块
在本文中, 我们将向你展示如何使用2个开源模块检查Node.js中是否存在有效的Internet连接。
A.使用internetAvailable模块Internet Available是一个有用的模块, 用于轻松验证Node.js是否存在活动的Internet连接。要在你的项目中安装此模块, 请在终端上执行以下命令:
npm install internet-available
该模块由《我们的代码世界》编写。该库依赖于用于从域解析DNS地址的dns-socket模块。但是, 如果默认情况下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 connectioninternetAvailable({timeout: 4000, retries: 10, }).then(function(){console.log("Internet available");
}).catch(function(){console.log("No internet");
});
如果超时时间到期, 则表示没有可用的连接。
如前所述, internetAvailable解析来自域名google.com的DNS地址。如果你不想使用该域进行验证, 则只需在设置中进行更改即可。以下示例显示了如何使用ourcodeworld.com域而不是google域。主机和端口可以更改, 但是我们将使用默认端口:
var internetAvailable = require("internet-available");
// Make it with a different verification addressinternetAvailable({domainName: "ourcodeworld.com", port: 53, host: '8.8.8.8'}).then(() =>
{console.log("Internet available");
}).catch(() =>
{console.log("No internet");
});
另外, 如果你要使用的域有特殊之处, 你可以更改验证的DNS端口和默认使用Google Public DNS的主机地址。
B.使用isOnline模块isOnline是一个模块, 与internetAvailable不同, 它可以在Node.js和浏览器(带有browserify / webpack)中工作, 并允许你验证是否存在活动的Internet连接。在浏览器中, 你具有navigator.onLine, 但它仅用于告诉你是否存在本地连接, 而不告诉你是否可以访问互联网, 因此没有用。
要在你的项目中安装此模块, 请在终端上执行以下命令:
npm install is-online
该模块执行对不同免费服务的一些请求, 它们全部并行运行:
- 通过HTTPS检索icanhazip.com
- 在OpenDNS上查询myip.opendns.com(仅Node.js)
- 检索Apple的Captive Portal测试页(仅Node.js)
要检查此模块是否可以连接互联网, 请使用以下代码(在浏览器中和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");
}});
该库允许你以与先前库对其选项相同的方式设置超时。此外, 你可以选择要使用的Internet协议版本。这是一个高级选项, 通常不需要设置, 但是对于明确声明IPv6连接性可能会很有用:
const isOnline = require('is-online');
isOnline({// Break on 5 secondstimeout: 5000, // v4 or v6version: "v4"}).then(online =>
{if(online){console.log("We have internet");
}else{console.log("Houston we have a problem");
}});
【如何检查Node.js中是否存在活动的Internet连接】编码愉快!
推荐阅读
- 如何使用Node.js混淆JavaScript代码
- 如何使用Node.js关闭和重启Linux
- 如何在Node.js中使用SSH2从UNIX服务器下载整个目录
- 找不到相对于目录的预设”es2015″和”react”
- Golang中用到的的Websocket库
- 超简单五步实现Linux虚拟机CentOS 7系统Root密码忘记重置
- Java技术指南「OpenJDK专题」想不想编译属于你自己的JDK呢((Windows环境))
- 从源码分析创建线程池的4种方式
- wait_event()和wait_event_interruptible()的介绍