跳到主要内容

4 篇博文 含有标签「Node」

查看所有标签

· 阅读需 20 分钟
熊滔

EventEmitter 的使用

EventEmitter 为我们提供了事件订阅机制,通过引入 events 模块来使用它。

const {EventEmitter} = require("events");
const eventEmitter = new EventEmitter();

// 监听 data 事件
eventEmitter.on("data", () => {
console.log("data");
});

// 触发 data 事件
eventEmitter.emit("data");

上述代码我们使用 on 方法来为事件绑定回调函数,使用 emit 方法来触发一个事件。

· 阅读需 21 分钟
熊滔

引入 Stream

假设我们有这么一个需求,我们需要复制一个文件中的内容到另一个文件中,我们会写出以下代码

const fs = require('fs');
const path = require('path');

const copy = (source, target) => {
fs.readFile(path.resolve(source), (err, data) => {
if(err) {
throw new Error(err.toString());
return;
}
fs.writeFile(path.resolve(target), data, (err) => {
if(!err) {
console.log("复制成功!");
}
})
})
}

· 阅读需 11 分钟
熊滔

Buffer 是 Node.js 的内置类型,它是用来表示内存中一块区域的,它保存的是二进制数据,可以将它看做为一个二进制数组。

Buffer 可以用来表示图片、视频这样的二进制数据,另外我们从文件中读取到的也是 Buffer 类型的数据,从网络中接收的数据也是 Buffer 类型的数据,所以学习 Buffer 还是很有必要的。

Buffer 位于全局作用域中,所以不需要通过 require('buffer') 来引入 Buffer。

创建 Buffer 对象

alloc

我们可以通过 Buffer.alloc(size, [fill], [encoding]) 来分配一个 size 字节大小的内存,还可以接收两个可选参数

  • fill:使用 fill 来填充 Buffer 中的每一个字节
  • encoding:如果 fill 为字符串,那么使用 encoding 来对字符串进行编码为二进制

当不指定 fill 参数,默认为填充 0。

· 阅读需 14 分钟
熊滔

Node.js 是单线程的,但是它却可以应用在高并发场景,原因就是它的事件循环机制。所以本篇文章来介绍 Node.js 的事件循环机制。