• Node.js Video Tutorials

Node.js - 全局对象



Node.js 中的全局对象是内置对象。Node.js 运行时由许多核心模块组成。要使用任何核心模块(例如 fs 模块或 http 模块)或从 npm 安装的任何外部模块(例如 express 模块)的功能,您需要使用 require() 函数加载它们。但是,某些模块、函数、类、变量等可以直接在 JavaScript 代码中使用,无需使用 require() 函数加载它们。它们被称为全局对象。让我们看看 Node.js 中的全局类、变量和函数。

Buffer 类

Buffer 类是一个全局类,可以在应用程序中访问,而无需导入 buffer 模块。Buffer 类的一个对象存储原始数据,类似于整数数组,但对应于 V8 堆之外的原始内存分配。

您可以创建一个 10 个字节的未初始化 Buffer:

var buf = new Buffer(10);

也可以从给定的数组创建 Buffer 对象:

var buf = new Buffer([10, 20, 30, 40, 50]);

或从给定的字符串创建:

var buf = new Buffer("Simply Easy Learning", "utf-8");

您可以对 Buffer 执行不同的操作,例如读取/写入数据、将 Buffer 转换为 JSON、连接 Buffer 等。

Console 类

Console 类包含诸如 console.log()、console.error() 和 console.warn() 等方法,可用于写入任何 Node.js 流。全局 console 可在不调用 require('node:console') 的情况下使用。

以下 REPL 会话显示了全局 console 对象的功能

> console.log("Hello World");
Hello World
undefined
> console.error("Some error occurred");
Some error occurred
undefined
> console.warn("This is a warning message!");
This is a warning message!
undefined

Process 对象

process 对象是一个全局对象,尽管它是在 process 模块中定义的。它是 EventEmitter 类的实例。process 对象提供有关当前进程的信息。借助与该对象关联的大量方法和属性,可以控制当前进程。

Process 对象的属性之一是 argv 数组。它存储传递给 node 可执行文件的命令行参数。

数组中的第 0 个元素是 node 可执行文件,第一个元素是 javascript 文件,后面是传递的参数。

将以下脚本另存为 hello.js 并从命令行运行它,从命令行向它传递一个字符串参数。

const args = process.argv;

console.log(args); 

const name = args[2];

console.log("Hello,", name);

在终端中,输入

PS D:\nodejs> node hello.js TutorialsPoint
[ 'C:\\nodejs\\node.exe', 'D:\\nodejs\\a.js', 'TutorialsPoint' ]
Hello, TutorialsPoint

process.argv0 属性存储 Node.js 启动时传递的 argv[0] 的原始值的只读副本。

Process 对象的 env 属性存储环境变量。您可以从命令行设置环境变量。在 node 可执行文件名之前为一个或多个变量赋值。

USER_ID=101 USER_NAME=admin node app.js

在脚本内部,环境变量作为 process.env 对象的属性可用

process.env.USER_ID; // "101"
process.env.USER_NAME; // "admin"

有关当前进程的一些有用信息存储在 process 对象的属性中,如下例所示。

示例

console.log('Process Architecture:'+process.arch);  
console.log('Current working directory:'+ process.cwd());
console.log('Process PID: '+process.pid);  
console.log('Process Platform: '+process.platform);  
console.log('Process Version: '+process.version);  

输出

Process Architecture:x64
Current working directory:D:\nodejs
Process PID: 11060
Process Platform: win32
Process Version: v20.9.0

全局计时器函数

Node.js 的 timer 模块定义了用于调度回调的函数。它们可以用作全局函数(无需导入模块)。

setTimeout() 函数用于在指定的毫秒数后运行回调。

function printHello() {
   console.log( "Hello, World!");
}

// Now call above function after 2 seconds
setTimeout(printHello, 2000);

clearTimeout() 函数用于停止先前使用 setTimeout() 创建的计时器。

setInterval() 函数用于在指定的毫秒数后重复运行回调。

function printHello() {
   console.log( "Hello, World!");
}

// Now call above function after 2 seconds
setInterval(printHello, 2000);

全局变量

__filename

__filename 表示正在执行的代码的文件名。这是此代码文件的解析绝对路径。对于主程序,这并不一定与命令行中使用的文件名相同。模块内部的值是该模块文件路径。

示例

创建一个名为 main.js 的 js 文件,其中包含以下代码:

// Let's try to print the value of __filename
console.log( __filename );

现在运行 main.js 以查看结果:

D:\nodejs\main.js

__dirname

__dirname 表示当前正在执行的脚本所在的目录的名称。

示例

创建一个名为 main.js 的 js 文件,其中包含以下代码:

// Let's try to print the value of __dirname
console.log( __dirname );

现在运行 main.js 以查看结果:

D:\nodejs

请注意,用于将给定模块导入 Node.js 运行时的 require() 函数也是一个全局函数。

全局对象

下表列出了我们在应用程序中经常使用的其他对象。有关更多详细信息,您可以参考官方文档。

序号 模块名称和描述
1 控制台

用于在 stdout 和 stderr 上打印信息。

2 进程

用于获取有关当前进程的信息。提供与进程活动相关的多个事件。

广告

© . All rights reserved.