Node.js入门(三)

一、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

原文地址:https://www.cnblogs.com/liuqiuchen/p/4519619.html