Node.js 之工具模块

OS 模块

提供基本的系统操作函数

Node.js os 模块提供了一些基本的系统操作函数。我们可以通过以下方式引入该模块:

var os = require("os")
  

实例

创建 main.js 文件,代码如下所示:

var os = require("os");

// CPU 的字节序
console.log('endianness : ' + os.endianness());

// 操作系统名
console.log('type : ' + os.type());

// 操作系统名
console.log('platform : ' + os.platform());

// 系统内存总量
console.log('total memory : ' + os.totalmem() + " bytes.");

// 操作系统空闲内存量
console.log('free memory : ' + os.freemem() + " bytes.");
  

代码执行结果如下:

$ node main.js 
endianness : LE
type : Linux
platform : linux
total memory : 25103400960 bytes.
free memory : 20676710400 bytes.
  

Path 模块

Node.js path 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方式引入该模块:

var path = require('path');
  

实例

创建 main.js 文件,代码如下所示:

var path = require("path");

// 格式化路径
console.log('normalization : ' + path.normalize('/test/test1//2slashes/1slash/tab/..'));

// 连接路径
console.log('joint path : ' + path.join('/test', 'test1', '2slashes/1slash', 'tab', '..'));

// 转换为绝对路径
console.log('resolve : ' + path.resolve('main.js'));

// 路径中文件的后缀名
console.log('ext name : ' + path.extname('main.js'));
  

代码执行结果如下:

$ node main.js 
normalization : /test/test1/2slashes/1slash
joint path : /test/test1/2slashes/1slash
resolve : /web/com/1427176256_27423/main.js
ext name : .js
  

Net 模块

Node.js Net 模块提供了一些用于底层的网络通信的小工具,包含了创建服务器/客户端的方法,我们可以通过以下方式引入该模块:

var net = require("net")
  

实例

创建 server.js 文件,代码如下所示:

var net = require('net');
var server = net.createServer(function(connection){
    console.log('client connected');
    connection.on('end',function(){
        console.log('客户端关闭连接');
    });
    connection.write('Hello World!\r\n');
    connection.pipe(connection);
});
server.listen(8080,function(){
    console.log('server is listening');
});
  

执行以上服务端代码:

$ node server.js
server is listening   # 服务已创建并监听 8080 端口
  

新开一个窗口,创建 client.js 文件,代码如下所示:

var net = require('net');
var client = new.connect({port:8080},function(){
    console.log('连接到服务器!'); 
});
client.on('data',function(data){
    console.log(data.toString());
    client.end();
});
client.on('end',function(){
    console.log('断开与服务器的连接');
});
  

执行以上客户端的代码:

连接到服务器!
Hello World!

断开与服务器的连接
  

DNS 模块

Node.js DNS 模块用于解析域名。引入 DNS 模块语法格式如下:

var dns = require('dns')
  

实例

创建 main.js 文件,代码如下所示:

var dns = require('dns');
dns.lookup('www.github.com',function onLookup(){
    console.log('ip 地址:',address);
    dns.reverse(address,function(err,hostnames){
        if(err){
            console.log(err.stack);
        }

        console.log('反向解析 ' + address + ': ' + JSON.stringify(hostnames));
    });
});
  

执行以上代码,结果如下所示:

address: 192.30.252.130
reverse for 192.30.252.130: ["github.com"]
  

Domain 模块

Node.js Domain(域) 简化异步代码的异常处理,可以捕捉处理 try catch 无法捕捉的异常。引入 Domain 模块 语法格式如下:

var domain = require('domain');
  

domain 模块,把处理多个不同的 IO 的操作作为一个组。注册事件和回调到 domain,当发生一个错误事件或抛出一个错误时,domain 对象会被通知,不会丢失上下文环境,也不导致程序错误立即推出,与 process.on(‘uncaughtException’) 不同。

Domain 模块可分为隐式绑定和显式绑定:

  • 隐式绑定: 把在 domain 上下文中定义的变量,自动绑定到 domain 对象
  • 显式绑定: 把不是在 domain 上下文中定义的变量,以代码的方式绑定到 domain 对象

实例

创建 main.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('转换为异常,系统将崩溃!'));
  

执行以上代码,结果如下所示:

监听器处理此错误 (通过监听器来处理)
domain1 处理这个错误 (通过 domain1 处理)
domain2 处理这个错误 (通过 domain2 处理)

events.js:72
        throw er; // Unhandled 'error' event
                ^
Error: 转换为异常,系统将崩溃!
    at Object.<anonymous> (/www/node/main.js:40:24)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:929:3