Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何有目的地使node.js服务器崩溃?_Javascript_Node.js_Crash - Fatal编程技术网

Javascript 如何有目的地使node.js服务器崩溃?

Javascript 如何有目的地使node.js服务器崩溃?,javascript,node.js,crash,Javascript,Node.js,Crash,如何有目的地使node.js服务器崩溃?(我希望在发生某些致命错误时执行此操作,以便立即提请我注意以进行修复) 我看过这篇文章,但我不想使用C模块或运行无休止的循环(因为我的应用程序运行在一个服务器上,我为我使用的CPU时间付费),这意味着将非常昂贵,很难最大化CPU 我尝试过使用process.exit和process.abort,但这只会关闭调用它的模块 例如,我的服务器是通过调用node main.js启动的,它需要几个我在其他文件中编写的自定义模块。如果在其中一个文件中调用process

如何有目的地使node.js服务器崩溃?(我希望在发生某些致命错误时执行此操作,以便立即提请我注意以进行修复)

我看过这篇文章,但我不想使用C模块或运行无休止的循环(因为我的应用程序运行在一个服务器上,我为我使用的CPU时间付费),这意味着将非常昂贵,很难最大化CPU

我尝试过使用process.exit和process.abort,但这只会关闭调用它的模块

例如,我的服务器是通过调用node main.js启动的,它需要几个我在其他文件中编写的自定义模块。如果在其中一个文件中调用process.exit或process.abort,则它将正确关闭这些其他文件中发生的任何事件,但不会关闭整个节点服务器和main.js

下面是一个简化的代码示例:

//crashServer.js
var exampleVar;

module.exports = function(){
    if (!exampleVar){
        var err = new Error("An error has occured");
        Error.captureStackTrace(err);
        //error logging code
        console.log("An error has occured and the server will now crash.");
        process.exit();
    }
};

//main.js
var crashServer = require("./crashServer.js");

crashServer();
while (true){
    console.log("Server still running");
}
如果我跑

node main.js
然后它将打印出仍在无限期运行的服务器

如果我删除while-true循环,它只会打印出“发生错误,服务器现在将崩溃”,然后退出(因为没有更多的代码要运行)。这证明process.exit命令正在运行,而while(true)循环仍在运行


我还有其他方法可以做到这一点吗?

Javascript中的无限循环简直是邪恶的,因为它们不允许事件循环执行任何正常的关闭处理,其中一些是允许在关闭过程中处理某些Javascript事件所必需的

如果替换此无限循环:

while (true){
    console.log("Server still running");
}
为此:

setInterval(function() {
    console.log("server still running");
}, 1000);

然后您的服务器应该关闭

Uhhh,
process.exit()
关闭当前进程,包括它加载的所有模块。您是否有可能运行多个进程?我使用
process.exit()
关闭我的node.js服务器,它工作得很好。@jfriend00我用一个例子编辑了我的问题,以说明Javascript中的meInfinite循环的情况很糟糕,因为它们不允许事件循环执行任何正常的关闭处理。如果将
while(true)
循环替换为
setInterval(function(){console.log(“服务器仍在运行”);},1000)
,则服务器应关闭。无需删除您的问题。你问了一个问题,得到了回答。