Node.js中的PHP die()等价物是什么

PHP*_*Pst 41 php node.js

die()Node.js中的PHP 等价物是什么?

Uli*_*ler 54

process.exit() 是等效的电话.

  • 他们并不等同.PHP的`die()`不会像Node.js'`process.exit()`那样终止服务器,它只是停止终止文件中的剩余代码.不幸的是,没有相应的东西. (8认同)
  • @MMiller 这部分是正确的,因为 PHP 具有完全不同的架构。PHP 起源于 CGI,在这种情况下(即单个进程执行 CGI 脚本)它似乎完全等同于我,因为它停止了进程。我认为 FCGI 和类似技术只是作为优化而不是在这个问题上改变游戏规则。因此,我认为您的问题非常挑剔,并没有反映 IMO 的实际问题。非常相似,您可以说在反向代理后面运行多个由 supervisord 启动的笔记实例将使 `process.exit()` 不会停止服务器。 (3认同)
  • 如果您不在函数中,也可以使用 `return`。然而,也存在一些差异。有关更多详细信息,请参阅我的答案。@MMiller 我想这可能更像你的意思? (2认同)

Anu*_*dya 16

我会用throw.抛出将导致当前的当前请求结束,并且不会终止节点进程.您可以使用错误视图捕获该输出.

throw new Error('your die message here');
Run Code Online (Sandbox Code Playgroud)

  • `throw`与`process.exit()`相比的优点是IMO你有错误信息.缺点(或者,有时候是一个优点)是它可能会被捕获到某个地方.因此,我不认为它是一个`die()`等价物,但作为一个应该考虑的许多用例的替代品. (4认同)

eke*_*ner 5

它需要向stderr(而不是stdout)报告并以非零状态退出而死()...

function die (errMsg) 
{
    if (errMsg)
        console.error(errMsg);
    process.exit(1);
}
Run Code Online (Sandbox Code Playgroud)


nl-*_*l-x 5

如果不在函数中,您可以使用:

return;
Run Code Online (Sandbox Code Playgroud)

但你也可以使用@UliKöhler的建议:

process.exit();
Run Code Online (Sandbox Code Playgroud)

有一些差异:

  • return结束更优雅.process.exit()更突然.
  • return没有设置退出代码,就像process.exit()没有.

例:

try {
    process.exitCode = 1;
    return 2;
}
finally {
    console.log('ending it...'); // this is shown
}
Run Code Online (Sandbox Code Playgroud)

这将ending it...在控制台上打印并退出,退出代码为1.

try {
    process.exitCode = 1;
    process.exit(2);
}
finally {
    console.log('ending it...'); // this is not shown
}
Run Code Online (Sandbox Code Playgroud)

这将在控制台上不打印任何内容并退出,退出代码为2.