- Node.js教程
- Node.js - 教程
- Node.js - 简介
- Node.js - 环境设置
- Node.js - 首次申请
- Node.js - REPL 终端
- Node.js - 命令行选项
- Node.js - 包管理器 (NPM)
- Node.js - 回调概念
- Node.js - 上传文件
- Node.js - 发送电子邮件
- Node.js - 活动
- Node.js - 事件循环
- Node.js - 事件发射器
- Node.js - 调试器
- Node.js - 全局对象
- Node.js - 控制台
- Node.js - 流程
- Node.js - 扩展应用程序
- Node.js - 包装
- Node.js - Express 框架
- Node.js - RESTful API
- Node.js - 缓冲器
- Node.js - Streams
- Node.js - 文件系统
- Node.js MySQL
- Node.js - MySQL 快速入门
- Node.js - MySQL创建数据库
- Node.js - MySQL创建表
- Node.js - MySQL Insert Into
- Node.js - MySQL Select From
- Node.js - MySQL Where 子句
- Node.js - MySQL Order By
- Node.js - MySQL Delete
- Node.js - MySQL Update
- Node.js - MySQL Join
- Node.js MongoDB
- Node.js - MongoDB 快速入门
- Node.js - MongoDB 创建数据库
- Node.js - MongoDB 创建集合
- Node.js - MongoDB Insert
- Node.js - MongoDB Find
- Node.js - MongoDB 查询
- Node.js - MongoDB 排序
- Node.js - MongoDB Delete
- Node.js - MongoDB Update
- Node.js - MongoDB Limit
- Node.js - MongoDB Join
- Node.js模块
- Node.js - 模块
- Node.js - 内置模块
- Node.js - utility 模块
- Node.js - Web 模块
Node.js - 流程
Node.js 中的流程对象是一个全局对象,尽管它是在流程模块中定义的。它是 EventEmitter 类的一个实例。进程对象提供有关当前Node.js进程的信息。借助与此对象关联的许多方法和属性,可以控制当前的Node.js过程。
流程事件
进程对象是 EventEmitter 的一个实例,并发出以下事件 -
事件 | 描述 |
---|---|
exit |
在进程即将退出时发出。此时无法阻止事件循环退出,一旦所有退出侦听器都完成运行,进程将退出。 |
beforeExit |
当节点清空其事件循环并且没有其他可调度的内容时,将发出此事件。通常,当没有计划工作时,节点会退出,但“beforeExit”的侦听器可以进行异步调用,并导致节点继续。 |
uncaughtException |
当异常一直冒泡回到事件循环时发出。如果为此异常添加了侦听器,则不会发生默认操作(即打印堆栈跟踪并退出)。 |
warning |
每当Node.js发出进程警告时,都会发出“warning”事件。进程警告类似于错误,因为它描述了引起用户注意的异常情况。 |
Signal Events |
当进程接收到SIGINT、SIGHUP等信号时发出。 |
例
在下面的代码中,进程对象的 beforeExit 事件与回调箭头函数相关联。同样,exit 事件调用另一个回调函数。beforeExit 上的函数首先运行,然后是 exit 事件上的函数。
process.on('beforeExit', (code) => {
console.log('A beforeExit event occured with code: ', code);
});
process.on('exit', (code) => {
console.log('Process exit event with code: ', code);
});
console.log('This message is displayed first.');
输出
A beforeExit event occured with code: 0
Process exit event with code: 0
请注意,侦听器函数只能执行同步操作。Node.js进程将在调用“exit”事件侦听器后立即退出,从而导致放弃仍在事件循环中排队的任何其他工作。例如,在以下示例中,超时永远不会发生 -
例
process.on('exit', function(code) {
// Following code will never execute.
setTimeout(function() {
console.log("This will not run");
}, 0);
console.log('About to exit with code:', code);
});
console.log("Program Ended");
输出
About to exit with code: 0
处理方法
abort()
abort() 方法立即终止当前进程,然后创建一个核心文件。
例以下程序每 1 秒向控制台打印一条消息,并在 5 秒后在调用 abort() 函数时终止循环。
const abortfunction = () => {
console.log('Start...');
// It prints the message after every 1 second
setInterval((function() {
return console.log('Hello World');
}), 1000);
// It calls process.abort() after 5 seconds
setTimeout((function() {
return process.abort();
}), 5000);
};
abortfunction();
输出
Hello World
Hello World
Hello World
Hello World
终止之后是长核心文件输出。
chdir()
此方法将更改Node.js进程的当前工作目录,或者在执行此操作失败时引发异常(例如,如果指定的目录不存在)。
cwd()
process.cwd() 方法返回 Node.js进程的当前工作目录。
例
console.log(`Starting directory: ${process.cwd()}`);
try {
process.chdir('NewNodeApp');
console.log(`New directory: ${process.cwd()}`);
} catch (err) {
console.error(`chdir: ${err}`);
}
输出
New directory: D:\nodejs\NewNodeApp
如果找不到目录,输出将如下所示 -
Starting directory: D:\nodejs
chdir: Error: ENOENT: no such file or directory, chdir 'D:\nodejs' -> 'NewDir'
exit()
此方法与代码的退出状态同步终止当前进程 (默认为“成功” 代码 0) 。在调用所有“exit”事件侦听器之前,Node.js不会终止。
例
console.log('Code running');
process.on('exit', function(code) {
return console.log(`exiting with the error code : ${code}`);
});
setTimeout((function() {
return process.exit(0); //after 5 sec
}), 5000);
输出
exiting with the error code : 0
kill()
此方法终止当前进程,并向 pid 标识的进程发送信号。
kill(pid[, signal])
Parameters
pid : 进程 ID
signal :要发送的信号,可以是字符串或数字。默认值:'SIGTERM'。
信号名称是字符串,例如“SIGINT”或“SIGHUP”。
例以下代码获取当前进程的 pid。它会等待足够长的时间,然后才会正常退出。在此期间,如果通过按 ctrl-C 发出 SIGINT 信号,则该过程不会终止。
const pid = process.pid;
console.log(`Process ID: ${pid}`);
process.on('SIGHUP', () => console.log('Received: SIGHUP'));
process.on('SIGINT', () => console.log('Received: SIGINT'));
setTimeout(() => {}, 100000); // keep process alive
setTimeout((function() {
return process.kill(pid, 'SIGINT'); //after 5 sec
}), 5000);
每当按下 ctrlC 时,终端都会显示进程 ID 和 Received: SIGINT。再次超时 5 秒后,将调用 kill() 方法,从而终止进程
Received: SIGINT
memoryUsage()
此函数返回一个对象,该对象描述以字节为单位的 Node.js 进程的内存使用情况。
例
console.log(process.memoryUsage());
输出
rss: 24768512,
heapTotal: 4079616,
heapUsed: 3153848,
external: 1097184,
arrayBuffers: 10519
}
nextTick()
此函数将回调函数的执行推迟到下一次事件循环迭代。
nextTick(callback[, ...args])
该函数是 Node.js 异步 API 中事件循环的重要组成部分。在 Node.js 中,事件循环的每次迭代都称为滴答。为了安排在事件循环的下一次迭代中调用的回调函数,我们使用 process.nextTick()。
例
console.log('start');
process.nextTick(() => {
console.log('nextTick callback executed in next iteration');
});
console.log('scheduled');
输出
scheduled
nextTick callback executed in next iteration
工艺特性
process.arch
为其编译 Node.js二进制文件的操作系统 CPU 体系结构。
可能的值为:
- 'arm',
- 'arm64',
- 'ia32',
- 'loong64',
- 'mips',
- 'mipsel',
- 'ppc',
- 'ppc64',
- 'riscv64',
- 's390',
- 's390x',
- 'x64'
例
console.log(`This processor architecture is ${process.arch}`);
输出
process.argv
此属性返回一个数组,其中包含启动Node.js进程时传递的命令行参数。您可以将参数传递给要从命令行执行的脚本。参数存储在数组 process.argv 中。数组中的第 0 个元素是节点可执行文件,第一个元素是 JavaScript 文件,然后是传递的参数。
将以下脚本另存为 你好.js 并从命令行运行它,从命令行向它传递一个字符串参数。
const args = process.argv;
console.log(args);
const name = args[2];
console.log("Hello,", name);
在终端中,输入
PS D:\nodejs> node hello.js Qikepu
[ 'C:\\nodejs\\node.exe', 'c:\\nodejs\\a.js', 'Qikepu' ]
Hello, Qikepu
process.env
property 返回一个包含环境变量的对象。
例
const processEnvKeys = Object.keys(process.env);
processEnvKeys.forEach((key) => {
console.log(`${key}: ${process.env[key]}`);
});
输出
SystemRoot: C:\WINDOWS
TEMP: C:\Users\mlath\AppData\Local\Temp
TMP: C:\Users\mlath\AppData\Local\Temp
USERDOMAIN: GNVBGL3
USERDOMAIN_ROAMINGPROFILE: GNVBGL3
USERNAME: mlath
USERPROFILE: C:\Users\mlath
windir: C:\WINDOWS
ZES_ENABLE_SYSMAN: 1
TERM_PROGRAM: vscode
TERM_PROGRAM_VERSION: 1.84.2
LANG: en_US.UTF-8
COLORTERM: truecolor
VSCODE_INJECTION: 1
VSCODE_NONCE: b8069509-e0f5-4bbd-aac9-fc448279b154
您还可以从命令行设置环境变量。将值分配给节点可执行文件名称之前的一个或多个变量。
USER_ID=101 USER_NAME=admin node app.js
在脚本内部,环境变量可用作 process.env 对象的属性
process.env.USER_ID; // "101"
process.env.USER_NAME; // "admin"
process.pid
属性返回进程的 PID。
例
const { pid } = require('node:process');
console.log(`This process is pid ${pid}`);
输出
流程平台
此属性返回一个字符串,用于标识操作系统。
可能的值为 -
- 'aix'
- 'darwin'
- 'freebsd'
- 'linux'
- 'openbsd'
- 'sunos'
- 'win32'
process.version
此属性包含Node.js版本字符串。
例
console.log(`Version: ${process.version}`);
输出