读书笔记: 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){ });
如:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。