gpt4 book ai didi

node.js - 在 Node.js 上调试正常关闭

转载 作者:行者123 更新时间:2023-12-02 16:07:11 24 4
gpt4 key购买 nike

我的 app.js 中有以下代码:

process.stdin.resume();//so the program will not close instantly

//do something when app is closing
process.on('exit',exitHandler.bind(null,{exit:true,event: "exit"}));

//catches uncaught exceptions
process.on('uncaughtException',exitHandler.bind(null, {exit:false,event: "uncaughtException"}));

我阅读了有关优雅关闭 Node.js 服务器的所有内容,但找不到有关如何调试它的任何内容。

问题是,当您单击调试控制台中的“停止”按钮时,IDE 必须终止/终止 Node 进程。

有人知道如何调试我的优雅关闭代码吗?关闭调试 session 时, Debug模式永远不会在 exitHandler 内的断点处停止。

我正在使用 WebStorm,但我了解到其他 IDE 上也可能会发生同样的情况。

谢谢

最佳答案

嗯,没有什么魔法。要获得 'exit' 事件,您的代码最终必须命中 process.exit() 代码,并且要获得 'uncaughtException' 您需要引发未处理的异常异常。

也许有一种疯狂的方法可以在不创建实际事件的情况下触发此代码,但您应该坚持正常的程序生命周期,因为这就是生产中的工作方式 - 这绝对是您想要测试的。

练习:如果你想看看你是否正确,你可以手动添加正确的代码到你的应用程序中,这样它就会在加载后被触发:

setTimeout(function() {
process.exit(1);
// or throw new Error("Uncaught exception");
}, 2000);

调试,然后删除。

如果您计划以某种方式将其集成到某些测试中,则需要在代码中保留以下行为,并添加一种触发它的方法:

.... // when app is loaded
if (process.env.NODE_TEST_TRIGGER_PROCESS_EXIT) {
process.exit(1);
}

并添加一个执行场景以使用适当的选项运行它:

$ NODE_TEST_TRIGGER_PROCESS_EXIT=true node myapp.js

UPD:如果你真的不关心不同的事件,请检查其他信号:https://nodejs.org/api/process.html#process_signal_events也许应用程序会收到 SIGINT 或 SIGTERM。但如果是SIGKILL,你仍然抓不到它,所以你必须自己创建事件。

关于node.js - 在 Node.js 上调试正常关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37132154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com