目录
article
Node.js 之工具模块
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