Ami*_*mir 7 javascript error-handling try-catch node.js
通常根据Node.js 文档,使用它不是一个好主意process.exit(),因为异步 IO 操作console.log()或其他日志记录方法(在我的例子中是 Pino日志记录库)可能会被跳过,进程在完成任务之前退出。我想知道处理函数内部错误的最佳方法是什么。我的最终目标是处理函数中的错误,如果错误是致命错误,则退出进程。
我写了一个我目前认为最好的选择的简化版本(类似于 Node.js 文档中解释的解决方案):
const validateUserInput = (input) => {
try {
if (input === 'wrong') { throw new Error('sample error'); } // simplified
} catch (err) {
console.log('last message');
// process.exit(1) --> using this might skip IO operation like the log on previous line
process.exitCode = 1;
return false;
}
return true;
};
if (validateUserInput('wrong')) {
// rest of the code
}
// nothing should be written here
Run Code Online (Sandbox Code Playgroud)
SIGTERM 是告诉进程正常终止的信号。这是从流程管理者(例如新贵或主管等)发出的信号。
您可以在另一个函数中从程序内部发送此信号:阅读更多
process.kill(process.pid, 'SIGTERM')
Run Code Online (Sandbox Code Playgroud)
您还可以为此事件设置自己的侦听器,并执行其他任务。
process.on('SIGTERM', () => {
server.close(() => {
console.log('Shutting down the application ...')
})
})
Run Code Online (Sandbox Code Playgroud)
但SIGTERM在 Windows 上不支持,所以你可以使用SIGINT,这里有一个有用的信息SIGINT
收到 SIGINT 信号后,Node.js 服务器启动关闭序列并进入关闭模式。所有现有请求均已完成,不会受理任何新请求。当最后一个请求完成时,服务器将关闭所有连接并关闭。阅读更多
有关流程的更多信息请参见此处
| 归档时间: |
|
| 查看次数: |
4214 次 |
| 最近记录: |