Node.js 中的全局、进程和缓冲区
全局: node.js 中的全局对象在所有模块中都可用,并且在本地限定为它们各自的模块。
一些全局对象是:
- 出口
- 模块
- 要求
- __文件名
- __目录名
上面的对象和 require函数可以在任何地方访问而无需导入。
进程:进程对象是一个全局对象,它提供有关 node.js 进程的信息和控制权。由于它是全局的,它可以在项目中使用,而无需从任何模块导入。
它是 EventEmitter 类的一个实例,具有许多有用的方法,可以帮助我们更多地了解已发生的过程以及当前正在进行的过程。
过程中的重要事件:
beforeExit 事件:此事件在 Node.js 事件循环变得神圣并且没有安排额外的工作之前触发。一般情况下,Node.js 进程会在没有进程时退出,但在 'beforeExit' 上注册的监听器可以进行异步调用。
Javascript
const process = require('process');
process.on('beforeExit', (data) => {
console.log('Process beforeExit event with code.');
});
process.on('exit', (data) => {
console.log('Process exit event with code');
});
console.log('This code is rendered first.');
Javascript
process.on('exit', (data) => {
console.log(`code execution is going to end `);
});
Javascript
var buf = Buffer.from('GeeksForGeeks');
console.log(buf.toString());
输出:
This code is rendered first.
Process beforeExit event with code.
Process exit event with code.
退出事件:当 Node.js 进程由于以下任一原因而即将退出时,会发出“退出”事件:
- 显式调用 process.exit() 方法。
- Node.js 事件循环不再需要执行任何额外的工作。
此时无法阻止事件循环的退出,一旦所有“退出”侦听器完成运行,Node.js 进程将终止。
Javascript
process.on('exit', (data) => {
console.log(`code execution is going to end `);
});
输出:
code execution is going to end
除了以上两个主要事件之外,流程对象还附带了更多的事件。
Buffer: Node.js 中的 Buffer 类用于处理原始二进制数据。每个缓冲区对应于在 V8 之外分配的一些原始内存。缓冲区的行为有点像整数数组,但不可调整大小并且有一大堆专门用于二进制数据的方法。
创建缓冲区:
var buffer = Buffer.alloc(6);
- 输出:
This will print out 6 bytes of zero
var buffer = Buffer.from("Welcome to GeeksforGeeks!", "utf-8");
- 输出:
This will print out a chain of values in utf-8
写入缓冲区:如果它包含两个参数,第一个参数是数据,第二个参数是编码类型。
buffer.write("GeeksForGeeks", "utf-8")
输出:
This will print out 13 as size of buffer
读取缓冲区:我们可以使用 toString() 方法读取缓冲区。
Javascript
var buf = Buffer.from('GeeksForGeeks');
console.log(buf.toString());
输出:
GeeksForGeeks