nodejs学习笔记

来源:互联网 发布:java培训4个月靠谱吗 编辑:程序博客网 时间:2024/06/08 19:12

Node.js 异步编程的直接体现就是回调。

异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。
回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。
例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。
这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。

阻塞代码实例:
var fs = require("fs");var data = fs.readFileSync('input.txt');console.log(data.toString());console.log("程序执行结束!");
非阻塞代码实例:
var fs = require("fs");fs.readFile('input.txt', function (err, data) {    if (err) return console.error(err);    console.log(data.toString());});console.log("程序执行结束!");
事件驱动:
// 引入 events 模块var events = require('events');// 创建 eventEmitter 对象var eventEmitter = new events.EventEmitter();// 创建事件处理程序var connectHandler = function connected() {   console.log('连接成功。');   // 触发 data_received 事件    eventEmitter.emit('data_received');}// 绑定 connection 事件处理程序eventEmitter.on('connection', connectHandler);// 使用匿名函数绑定 data_received 事件eventEmitter.on('data_received', function(){   console.log('数据接收成功。');});// 触发 connection 事件 eventEmitter.emit('connection');console.log("程序执行完毕。");
在 Node 应用程序中,执行异步操作的函数将回调函数作为最后一个参数, 回调函数接收错误对象作为第一个参数。Node.js EventEmitter

Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。
Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件,
一个fs.readStream对象会在文件被打开的时候发出一个事件。
所有这些产生事件的对象都是 events.EventEmitter 的实例。

Node.js Buffer(缓冲区)
var buf = new Buffer(10);var buf = new Buffer([10, 20, 30, 40, 50]);var buf = new Buffer("www.baidu.com", "utf-8");buf.write(string[, offset[, length]][, encoding]);

string - 写入缓冲区的字符串。
offset - 缓冲区开始写入的索引值,默认为 0 。
length - 写入的字节数,默认为 buffer.length
encoding - 使用的编码。默认为 ‘utf8’ 。
读取buffer:
buf.toString([encoding[, start[, end]]])
参数
encoding - 使用的编码。默认为 ‘utf8’ 。
start - 指定开始读取的索引位置,默认为 0。
end - 结束位置,默认为缓冲区的末尾。
返回值
解码缓冲区数据并使用指定的编码返回字符串。
实例

buf = new Buffer(26);for (var i = 0 ; i < 26 ; i++) {  buf[i] = i + 97;}console.log( buf.toString('ascii'));       // 输出: abcdefghijklmnopqrstuvwxyzconsole.log( buf.toString('ascii',0,5));   // 输出: abcdeconsole.log( buf.toString('utf8',0,5));    // 输出: abcdeconsole.log( buf.toString(undefined,0,5)); // 使用 'utf8' 编码, 并输出: abcde
0 0