os 模块提供了一些基本的系统操作函数, 具体看如下代码:
node - os.js 代码如下 ---
- var os = require("os");
- // 返回操作系统的默认临时文件夹
- console.log('tmpdir :' + os.tmpdir());
- // CPU 的字节序
- console.log('endianness :' + os.endianness());
- // 主机名
- console.log('hostname :' + os.hostname());
- // 操作系统名
- console.log('type :' + os.type());
- // 操作系统名
- console.log('platform :' + os.platform());
- // 操作系统 cpu 架构, 可能的值有 "x64""arm"和"ia32"console.log('arch : ' + os.arch());
- // 操作系统发行版本
- console.log('release :' + os.release());
- // 操作系统运行时间, 以秒为单位
- console.log('uptime :' + os.uptime());
- // 系统内存总量
- console.log('total memory :' + os.totalmem() + "bytes.");
- // 操作系统空闲内存量
- console.log('free memory :' + os.freemem() + "bytes.");
- // 数组, 返回所安装的每个 cpu 内核信息: 型号速度时间
- console.log('cpus :' + os.cpus());
- // 获得网络接口列表
- console.log('networkInterfaces :' + os.networkInterfaces());
终端输入:
- G:\node\node-tools> node node-os.js
- tmpdir : C:\Users\admin\AppData\Local\Temp
- endianness : LE
- hostname : DESKTOP-H1QO0Q0
- type : Windows_NT
- platform : win32
- arch : x64
- release : 10.0.16299
- uptime : 454734.2622153
- total memory : 8494243840 bytes.
- free memory : 3918430208 bytes.
如此一来, 关于你电脑的操作系统的基本信息, 此处可以一目了然
path 模块提供了一些用于处理文件路径的小工具, 具体看如下代码:
node - path.js 代码如下:---
- var path = require("path");
- // 格式化路径
- console.log('normalize :' + path.normalize('/node/node-tools..'));
- // 连接路径
- console.log('join:' + path.join('node', '/node-tools', 'node-path.js'));
- // 转换为绝对路径
- console.log('resolve :' + path.resolve('node-path.js'));
- // 判断是否是绝对路径
- console.log('isAbsolute :' + path.isAbsolute('node-path.js'));
- // 判断是否是相对路径
- console.log('relative :' + path.relative('node', 'node-tools', '/node-path.js'));
- // 返回路径中代表文件夹的部分
- console.log('dirname :' + path.dirname('node/node-tools/node-path.js'));
- // 返回路径中的最后一部分
- console.log('basename :' + path.basename('node-path.js'));
- // 返回路径字符串的对象 path.parse(pathString); 返回路径字符串 path.format(pathObject)
- // 路径中文件的后缀名
- console.log('ext name :' + path.extname('node-path.js'));
终端输入
- G:\node\node-tools> node node-path.js
- normalize : \node\node-tools..
- join: node\node-tools\node-path.js
- resolve : G:\node\node-tools\node-path.js
- isAbsolute : false
- relative : ..\node-tools
- dirname : node/node-tools
- basename : node-path.js
- ext name : .js
net 模块提供了一些用于底层的网络通信的小工具, 具体看如下代码:
node - server.js 服务端代码:---
- var net = require('net');
- // net.createServer 创建 TCP 服务器
- var server = net.createServer(function(connection) {
- console.log('client connected');
- // connection 新连接创建后被触发
- connection.on('end',
- function() {
- console.log('客户端关闭连接');
- });
- connection.write('Hello World!\r\n');
- connection.pipe(connection);
- });
- // server.listen 监听端口
- server.listen(4321,
- function() {
- console.log('server is listening');
- });
执行服务端代码:
- G:\node\node-tools> node node-server.js
- server is listening on port 4321
创建客户端 node-client.js
- var net = require('net');
- var client = net.connect({port: 4321}, function() {
- console.log('连接到服务器!');
- });
- client.on('data', function(data) {
- console.log(data.toString());
- client.end();
- });
- client.on('end', function() {
- console.log('断开与服务器的连接');
- });
执行客户端代码:
G:\node\node-tools> node node-client.js
连接到服务器!
Hello 风慕李!
断开与服务器的连接
你可以尝试着执行客户端代码后观看服务端代码的执行打印, 或者关闭服务端查看客户端代码执行打印
关于 net 模块更多用法请参考官网
DNS 模块用于解析域名
node - dns.js 代码如下:---
- var dns = require('dns');
- //dns.lookup 将域名 (比如'www.github.com') 解析为第一条找到的记录 A (IPV4)或 AAAA(IPV6)
- dns.lookup('www.github.com',
- function onLookup(err, address, family) {
- console.log('ip 地址:', address);
- // dns.reverse 将一个域名 (如'runoob.com') 解析为一个 rrtype 指定记录类型的数组
- /**
- * rrtypes
- 以下列出了 dns.resolve() 方法中有效的 rrtypes 值:
- 'A' IPV4 地址, 默认 dns.resolve4
- 'AAAA' IPV6 地址 dns.resolve6
- 'MX' 邮件交换记录 dns.resolveMx
- 'TXT' text 记录 dns.resolveTxt
- 'SRV' SRV 记录 dns.resolveSrv
- 'PTR' 用来反向 IP 查找
- 'NS' 域名服务器记录 dns.resolveNs
- 'CNAME' 别名记录 dns.resolveCname
- 'SOA' 授权记录的初始值 dns.resolveSoa
- */
- dns.resolve(address,
- function(err, hostnames) {
- if (err) {
- console.log(err.stack);
- }
- console.log('反向解析' + address + ':' + JSON.stringify(hostnames));
- });
- dns.reverse(address,
- function(err, hostnames) {
- if (err) {
- console.log(err.stack);
- }
- console.log('反向解析' + address + ':' + JSON.stringify(hostnames));
- });
- });
关于 dns 更多用法请参考这里
终端执行 node-dns.js
G:\node> node node-tools/node-dns.js
ip 地址: 192.30.255.112
反向解析 192.30.255.112: ["192.30.255.112"]
反向解析 192.30.255.112: ["lb-192-30-255-112-sea.github.com"]
domain 模块简化异步代码的异常处理, 可以捕捉处理 try catch 无法捕捉的异常
node - domain.js 代码如下:---
- var EventEmitter = require("events").EventEmitter;
- var domain = require("domain");
- var emitter1 = new EventEmitter();
- // 创建域
- var domain1 = domain.create();
- domain1.on('error',
- function(err) {
- console.log("domain1 处理这个错误 (" + err.message + ")");
- });
- // 显式绑定
- domain1.add(emitter1);
- emitter1.on('error',
- function(err) {
- console.log("监听器处理此错误 (" + err.message + ")");
- });
- emitter1.emit('error', new Error('通过监听器来处理'));
- emitter1.removeAllListeners('error');
- emitter1.emit('error', new Error('通过 domain1 处理'));
- var domain2 = domain.create();
- domain2.on('error',
- function(err) {
- console.log("domain2 处理这个错误 (" + err.message + ")");
- });
- // 隐式绑定
- domain2.run(function() {
- var emitter2 = new EventEmitter();
- emitter2.emit('error', new Error('通过 domain2 处理'));
- });
- domain1.remove(emitter1);
- emitter1.emit('error', new Error('转换为异常, 系统将崩溃!'));
代码或许你看着有点绕, 你可以结合终端打印来分析重看代码理解:
G:\node> node node-tools/node-domain.js
监听器处理此错误 (通过监听器来处理)
domain1 处理这个错误 (通过 domain1 处理)
domain2 处理这个错误 (通过 domain2 处理)
- events.js: 182
- throw er; // Unhandled 'error' event
- ^
Error: 转换为异常, 系统将崩溃!
- at Object.<anonymous> (G:\node\node-tools\node-domain.js:39:24)
- at Module._compile (module.js:573:30)
- at Object.Module._extensions..js (module.js:584:10)
- at Module.load (module.js:507:32)
- at tryModuleLoad (module.js:470:12)
- at Function.Module._load (module.js:462:3)
- at Function.Module.runMain (module.js:609:10)
- at startup (bootstrap_node.js:158:16)
- at bootstrap_node.js:598:3
来源: http://www.jianshu.com/p/e306a3120abf