这章我们来研究下nodejs为我们提供的常用系统工具。
1.OS模块
os模块为我们提供了一些操作系统OS的常用接口方法,nodejs是跨平台的所以,我们在之后测试输出的相关操作系统参数在不同平台上也会有不同,这里我用的是win10操作系统。
首先需要引入os模块:
var os = require("os");
- os.tmpdir() 返回操作系统的默认临时文件夹。
var tdir=os.tmpdir();
console.log("操作系统的默认临时文件夹:"+tdir);
运行输出【操作系统的默认临时文件夹:C:\Users\ADMINI~1\AppData\Local\Temp】
- os.endianness() 返回 CPU 的字节序,可能的是 "BE"(Big Endian大端字节序) 或 "LE"(Little Endian小端字节序)。
var cpuendia=os.endianness();
console.log("CPU 的字节序:"+cpuendia);
执行输出【CPU 的字节序:LE】//我这里是PC 一般pc都是小端字节序,所以输出为“LE”
- os.hostname() 返回操作系统的主机名。
var hostname=os.hostname();
console.log("操作系统的主机名:"+hostname);
执行输出【操作系统的主机名:67GCH468JGG565O】
- os.platform() 返回操作系统名。
var platform=os.platform();
console.log("操作系统名:"+platform);
执行输出【操作系统名:win32】
- os.arch() 返回操作系统 CPU 架构,可能的值有 "x64"、"arm" 和 "ia32"。
var osarch=os.arch();
console.log("操作系统 CPU 架构:"+osarch);
执行输出【操作系统 CPU 架构:x64】
- os.loadavg() 返回一个包含 1、5、15 分钟平均负载的数组。
var loadavg=os.loadavg();
console.log("一个包含 1、5、15 分钟平均负载的数组:%j",loadavg);
执行输出【一个包含 1、5、15 分钟平均负载的数组:[0,0,0]】
- os.totalmem() 返回系统内存总量,单位为字节
var totalmem=os.totalmem();
console.log("系统内存总量,单位为字节:"+totalmem+"约等于"+Math.floor(totalmem/1024/1024)+"MB");
执行输出【系统内存总量,单位为字节:8488148992约等于8094MB】
- os.freemem() 返回操作系统空闲内存量,单位是字节。
var freemem=os.freemem();
console.log("操作系统空闲内存量,单位是字节:"+freemem+"约等于"+Math.floor(freemem/1024/1024)+"MB");
执行输出【操作系统空闲内存量,单位是字节:4282806272约等于4084MB】
- os.type() 返回操作系统类型('Linux' 在 Linux系统上, 'Darwin' 在 macOS 系统上,'Windows_NT' 在 Windows系统上.)
var ostype=os.type();
console.log("操作系统类型:"+ostype);
执行输出:【操作系统类型:Windows_NT】
- os.cpus() 返回操作系统cpus(型号、速度(单位 MHz)、时间(一个包含 user、nice、sys、idle 和 irq 所使用 CPU/内核毫秒数)
被赋予网络地址的对象包含的属性:
-
model
-
speed
(兆赫兹为单位) -
times
[
{
model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: {
user: 252020,
nice: 0,
sys: 30340,
idle: 1070356870,
irq: 0
}
},
{
model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: {
user: 306960,
nice: 0,
sys: 26980,
idle: 1071569080,
irq: 0
}
},
{
model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: {
user: 248450,
nice: 0,
sys: 21750,
idle: 1070919370,
irq: 0
}
},
{
model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: {
user: 256880,
nice: 0,
sys: 19430,
idle: 1070905480,
irq: 20
}
},
{
model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: {
user: 511580,
nice: 20,
sys: 40900,
idle: 1070842510,
irq: 0
}
},
{
model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: {
user: 291660,
nice: 0,
sys: 34360,
idle: 1070888000,
irq: 10
}
},
{
model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: {
user: 308260,
nice: 0,
sys: 55410,
idle: 1071129970,
irq: 880
}
},
{
model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: {
user: 266450,
nice: 1480,
sys: 34920,
idle: 1072572010,
irq: 30
}
}
]
- os.networkInterfaces() 返回一个对象,包含只有被赋予网络地址的网络接口。
-
address
被赋予的 IPv4 或 IPv6 地址 -
netmask
IPv4 或 IPv6 子网掩码 -
family
IPv4
或IPv6
-
mac
网络接口的MAC地址 -
internal
如果 网络接口是loopback或相似的远程不能用的接口时, 值为 true
,否则为false
-
scopeid
IPv6 数字领域识别码 (只有当 family
是IPv6
时可用) -
cidr
以 CIDR 表示法分配的带有路由前缀的 IPv4 或 IPv6 地址。如果 netmask
参数不可用,则该属性是null
。
{
lo: [
{
address: '127.0.0.1',
netmask: '255.0.0.0',
family: 'IPv4',
mac: '00:00:00:00:00:00',
internal: true,
cidr: '127.0.0.1/8'
},
{
address: '::1',
netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
family: 'IPv6',
mac: '00:00:00:00:00:00',
internal: true,
cidr: '::1/128'
}
],
eth0: [
{
address: '192.168.1.108',
netmask: '255.255.255.0',
family: 'IPv4',
mac: '01:02:03:0a:0b:0c',
internal: false,
cidr: '192.168.1.108/24'
},
{
address: 'fe80::a00:27ff:fe4e:66a1',
netmask: 'ffff:ffff:ffff:ffff::',
family: 'IPv6',
mac: '01:02:03:0a:0b:0c',
internal: false,
cidr: 'fe80::a00:27ff:fe4e:66a1/64'
}
]
}
2.Path模块
- path.resolve(from,to) 返回将相对路径转为绝对路径。
var absolutedir=path.resolve("tools_test.js");
console.log("将相对路径转为绝对路径:",absolutedir);
执行输出【将相对路径转为绝对路径: F:\Projects\nodejs\nodejstest-lession\lession6-nodejs-tools\tools_test.js】
- path.isAbsolute(path) 返回是否绝对路径。
var isAbsolute=path.isAbsolute(absolutedir);
console.log("是否绝对路径:"+isAbsolute);
执行输出:【是否绝对路径:true】
- path.dirname(path) 返回路径中代表文件夹的部分。
var dirname=path.dirname(absolutedir);
console.log("路径中代表文件夹的部分:"+dirname);
执行输出:【路径中代表文件夹的部分:F:\Projects\nodejs\nodejstest-lession\lession6-nodejs-tools】
- path.basename(path) 返回路径中的最后一部分。
var basename=path.basename(absolutedir);
console.log("路径中的最后一部分:"+basename);
执行输出:【路径中的最后一部分:tools_test.js】
- path.extname(path) 返回文件的扩展名。
var extname=path.extname(absolutedir);
console.log("扩展名:"+extname);
执行输出:【扩展名:.js】
url参数查询解析模块
- querystring.stringify(obj) 把js对象以url参数形式编码
const querystring=require("querystring");
var person={name:"July",age:22,address:"中国北京"};
var str=querystring.stringify(person);
console.log("编码后的键值对参数:%s",str);
执行输出:【编码后的键值对参数:name=July&age=22&address=%E4%B8%AD%E5%9B%BD%E5%8C%97%E4%BA%AC】
- querystring.parse(str) 解析url参数为js对象
var parse_person=querystring.parse(str);//str 是 name=July&age=22&address=%E4%B8%AD%E5%9B%BD%E5%8C%97%E4%BA%AC
console.log("解析后的键值对参数对象:%j",parse_person);
执行输出:【解析后的键值对参数对象:{"name":"July","age":"22","address":"中国北京"}】