首页 > 代码库 > 读书笔记: nodejs 参考文档

读书笔记: nodejs 参考文档

>> buffer
Buffer对象是全局对象
Buffer支持的编码方式:ascii, utf8, base64, binary
new Buffer(size)
new Buffer(array)
new Buffer(str, encoding=‘utf8‘)

buffer.write(str,offset=0, encoding=‘utf8‘)
buffer.toString(encoding, start=0, end=buffer.length);

buffer[index]

Buffer.byteLength(string, encoding=‘utf8‘)
buffer.length //分配给buffer对象的内存大小 字节为单位

buffer.copy(targetBuffer, targetStart, sourceStart, sourceEnd=buffer.length)
buffer.slice(start, end);//返回引用同一段内存的buffer对象, 注意和str.slice()不同


>> eventEmitter
所有能够触发事件的对象都是 events.eventEmitter 的实例。
注册新的事件监听器时,会触发 newListener 事件
出错则触发 error事件,若没被捕获,则输出调用栈,并退出应用

* event: newListener
* event: error

* emitter.on(event, listener); //向监听器数组添加1个监听器
如:
server.on(‘stream‘, function(){
console.log(‘someone connected‘);
});

* emitter.removeListener(event, listener); //从指定监听器数组,移除指定监听器 (监听器数组重新调整索引 splice)
如:
var callback = function(stream){ console.log(‘someone connected!‘)};

server.on(‘stream‘, callback);
//...
server.removeListener(‘stream‘, callback);

* emitter.removeAllListeners(event)

* emitter.listeners(event); //返回指定事件的监听器数组

* emitter.emit(event, [arg1], [arg2],...); //触发事件

>> streams
stream是一个抽象接口,node中很多对象都实现了这个接口(如 request, stdout), stream对象是EventEmitter的实例。
stream可以是 只读,只写,可读可写 的

> readable stream 只读流
只读流的方法、属性和事件

* event:data
stream.on(data, function(data){
//data: buffer or string (若调用过setEncoding())
});

* event:end
流遇到EOF或TCP中的FIN时触发,表示不会再有数据进来
stream.on(‘end‘, function(){ });

* event:error
stream.on(‘error‘, function(exception){ });

* event:close
内部的文件描述符被关闭时触发
stream.on(‘close‘,function(){ });

* event:fd
当数据流接收到文件描述符信息时触发 (一个文件的数据流信息包括2部分:文件描述符信息和文件的数据信息) unix流
stream.on(‘fd‘, function(fd){ });

* stream.readable

* stream.setEncoding(encoding);
设置data事件返回的是字符串而不是buffer对象,编码方式有:ascii, utf8, base64

* stream.pause(); //暂停触发data事件

* stream.destroy();
关闭内部的文件描述符,这样流不会再触发任何事件

> writable stream 可写流
可写流的方法、属性和事件:

* event:drain
在一个write方法被调用并返回false后触发,表示可安全地再次写入该stream
stream.on(‘drain‘, function(){ });

* event:error
stream.on(‘error‘, function(exception){ });

* event:close
当底层的文件描述符已终止时触发
stream.on(‘close‘, function(){ });

* stream.writable

* stream.write(string, encoding=‘utf8‘,[fd]);
用指定的编码方式编码字符串后写入流中,若字符串被成功刷新到内核缓冲区则返回true, 否则返回false, 数据在未来写入。
drain事件通知内核缓冲区何时为空

* stream.write(buffer); 同上

* stream.end();
通过EOF或FIN来终止流

* stream.end(string, encoding); //~~相当于 stream.write(string, encoding) 后,stream.end()

* stream.end(buffer); //同上

* stream.destroy();
终止底层的文件描述符,之后流不会发出任何事件

>> global objects 全局对象

* global
全局命名空间对象 ~~类似于浏览器环境下的window?

* process 进程对象

* require() 加载依赖模块

* require.paths
一个保存了require函数搜索路径的数组,可往里面添加自定义路径

* __filename
当前正在执行的脚本的绝对路径

* __dirname
当前正在执行脚本的文件夹

* module
指向当前模块的引用, module.exports 和 exports指向同一个引用


> process 进程
process对象是EventEmitter的实例

* event:exit
进程退出时触发,是检查模块状态的好地方(如单元测试)
process.on(‘exiti‘, function(){ });
如:
process.on(‘exit‘, function(){
process.nextTick(function(){//下一次事件循环
console.log(‘this will not run‘);
});
console.log(‘about to exit‘);
});

* event:uncaughtException 未捕获异常
process.on(‘uncaughtException‘, function(error){ });
如:

 

读书笔记: nodejs 参考文档