一、Node.js全局对象
Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。
1.process
process 是一个全局变量,即 global 对象的属性。
process.argv是命令行参数数组,第一个元素是 node,第二个元素是脚本文件名, 从第三个元素开始每个元素是一个运行参数。
1 console.log(process.argv);
命令行:
1 $ node argv.js 1991 name=byvoid --v "Carbo Kuo" 2 [ 'node', 3 '/home/byvoid/argv.js', 4 '1991', 5 'name=byvoid', 6 '--v', 7 'Carbo Kuo' ]
process.stdout是标准输出流
console.log()向标准输出打印字符,
process.stdout.write()提供了更底层的接口。
process.stdin是标准输入流,必须先恢复流,才能从标准读入数据,并手动编写流的事件响应函数。
1 process.stdin.resume(); //恢复流 2 process.stdin.on('data',function (data){ //编写流的事件响应函数 3 process.stdout.write('read from console: ' + data.toString()); //标准输出流 4 });
process.nextTick(callback)的功能是为事件循环设置一项任务,Node.js 会在 下次事件循环调响应时调用 callback。
详见:http://www.w3cschool.cc/nodejs/nodejs-global-object.html
2.console
console.log()
1 console.log(); //显示一个换行的效果 2 console.log('Hello world'); 3 console.log('byvoid%diovyb'); //byvoid%diovyb 4 console.log('byvoid%diovyb',1991); //byvoid1991iovyb
console.error():与console.log()用法相同,只是向标准错误流输出。
console.trace():向标准错误流输出当前的调用栈。
1 console.trace();
运行结果为:
1 Trace: 2 at Object.<anonymous> (/home/byvoid/consoletrace.js:1:71) 3 at Module._compile (module.js:441:26) 4 at Object..js (module.js:459:10) 5 at Module.load (module.js:348:31) 6 at Function._load (module.js:308:12) 7 at Array.0 (module.js:479:10) 8 at EventEmitter._tickCallback (node.js:192:40)
二、Node.js常用工具util
util.inherits(constructor,superConstuctor) - 实现[原型间]对象的继承
1 var util = require('util'); 2 3 function Base(){ 4 this.name = 'base'; 5 this.base = 1991; 6 this.sayHello = function (){ 7 console.log('Hello ' + this.name); 8 }; 9 } 10 11 Base.prototype.showName = function (){ 12 console.log(this.name); 13 }; 14 15 function Sub(){ 16 this.name = 'sub'; 17 } 18 19 util.inherits(Sub,Base); 20 21 var objBase = new Base(); 22 objBase.showName(); 23 objBase.sayHello(); 24 console.log(objBase); 25 26 var objSub = new Sub(); 27 objSub.showName(); 28 //objSub.sayHello(); //不能实现,不是原型链的方法,无法共享、继承 29 console.log(objSub);
运行结果:
1 base 2 Hello base 3 { name: 'base', base: 1991, sayHello: [Function] } 4 sub 5 { name: 'sub' }
util.inspect(object,[showHidden],[depth],[colors]) - 将任意对象转换为字符串的方法,通常用于调试和错误输出。
object - 要转换的对象
showHidden - 可选参数,如果值为true,将会输出更多隐藏信息
depth - 表示最大的递归数,不指定默认递归2层,指定为null表示不限递归层数完整遍历对象
color - 如果color值为true,输出格式将会以ANSI 颜色编码,通常用于在终端显示更漂亮的效果
1 var util = require('util'); 2 3 function Person(){ 4 this.name = 'byvoid'; 5 this.toString = function (){ 6 return this.name; 7 }; 8 } 9 10 var obj = new Person(); 11 console.log(util.inspect(obj)); 12 console.log(util.inspect(obj,true));
运行结果:
util.isArray(object) - 如果给定参数“object”是一个数组返回true,否则返回false
1 var util = require('util'); 2 3 console.log(util.isArray([])); //true 4 console.log(util.isArray(new Array)); //true 5 console.log(util.isArray({})); //false
util.isRegExp(object) - 如果给定的参数 "object" 是一个正则表达式返回true,否则返回false。
1 var util = require('util'); 2 console.log(util.isRegExp(/some regexp/)); //true 3 console.log(util.isRegExp(new RegExp('another regexp'))); //true 4 console.log(util.isRegExp({})); //false
util.isDate(object) - 如果给定的参数 "object" 是一个日期返回true,否则返回false
1 var util = require('util'); 2 console.log(util.isDate(new Date())); //true 3 console.log(util.isDate(Date())); //false 4 console.log(util.isDate({})); //false
util.isError(object) - 如果给定的参数 "object" 是一个错误对象返回true,否则返回false
1 var util = require('util'); 2 3 console.log(util.isError(new Error())); //true 4 console.log(util.isError(new TypeError())); //true 5 console.log(util.isError({name:'error',message:'an error occured'})); //false
三、文件系统
fs.readFile(filename,[encoding],[callback(err,data)]) - 异步读取文件
filename(必选),表示要读取的文件名。
encoding(可选),表示文件的字符编码。
callback 是回调函数,用于接收文件的内容。
如果不指 定 encoding,则 callback 就是第二个参数。
例如以下程序,我们从content.txt 中读取数据,但不指定编码:
1 var fs = require('fs'); 2 fs.readFile('content.txt',function (err,data){ 3 if(err){ 4 console.log(err); 5 }else{ 6 console.log(data); 7 } 8 });
假设content.txt 中的内容是UTF-8 编码的 Text 文本文件示例,运行结果如下:
1 <Buffer 54 65 78 74 20 e6 96 87 e6 9c ac e6 96 87 e4 bb b6 e7 a4 ba e4 be 8b>
这个程序以二进制的模式读取了文件的内容,data 的值是 Buffer 对象。
如果我们给fs.readFile 的 encoding 指定编码:
1 var fs = require('fs'); 2 fs.readFile('content.txt','utf-8',function (err,data){ 3 if(err){ 4 console.log(err); 5 }else{ 6 console.log(data); 7 } 8 });
运行结果:
fs.readFileSync() - 同步读取文件,如果有错误发生,fs 将会抛出异常,你需要使用 try 和 catch 捕捉并处理异常。
fs.open(path, flags, [mode], [callback(err, fd)])
path - 文件的路径
flags - {
r :以读取模式打开文件。
r+ :以读写模式打开文件。
w :以写入模式打开文件,如果文件不存在则创建。
w+ :以读写模式打开文件,如果文件不存在则创建。
a :以追加模式打开文件,如果文件不存在则创建。
a+ :以读取追加模式打开文件,如果文件不存在则创建
}
文件系统,详见API:http://nodeapi.ucdok.com/#/api/fs.html