2014-01-17 24 views

回答

37

process.exit()是等效呼叫。

+6

它們不等價。 PHP的'die()'不會像Node.js的process.exit()那樣終止服務器,它只會停止終止文件中剩餘的代碼。不幸的是,沒有相應的東西。 –

+1

@MMiller這是部分錯誤,因爲PHP具有完全不同的體系結構。 PHP源自CGI,在這種情況下(即執行CGI腳本的單個進程),它似乎與我完全相同,因爲它會停止進程。我認爲FCGI和類似的技術僅僅是作爲優化而不是關於這個問題的改變者。因此,我認爲你的問題很挑剔,並不能反映IMO的現實問題。非常相似,你可以說在反向代理背後運行多個supervisord啓動的note實例會使得process.exit()不會停止服務器。 –

+1

如果你不在函數中,你也可以使用'return'。但是有一些差異。查看我的答案瞭解更多詳情。 @MMiller我認爲這可能更符合你的意思? –

11

我會用throw。拋出會導致當前的請求結束,並且不會終止節點進程。您可以使用錯誤視圖捕獲輸出。

throw new Error('your die message here'); 
+3

'throw'與'process.exit()'相比的優點是IMO有一個錯誤信息。缺點(或者,有時候是一個優點),就是它可能在某個地方被捕獲。因此,我不認爲它是一個「die()」等價物,但是作爲許多應用程序應該考慮的用例的替代方案。 –

+0

此投票結果!我寧願'拋出',並按順序獲取我的'catch',而不是讓整個Web服務器受到影響。 – AvadData

+0

@AvadData這顯然取決於你的用例。這個問題顯然是等同於'die()',而'throw'將等同於'throw' ... –

3

它需要到stderr(而不是輸出)和退出有一個非零狀態報告中死亡()...

function die (errMsg) 
{ 
    if (errMsg) 
     console.error(errMsg); 
    process.exit(1); 
} 
2

如果不是在一個功能,您可以使用:

return; 

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

process.exit(); 

存在着一定差別:

  • return結束更優美。 process.exit()更突然。
  • return沒有設置退出碼,就像process.exit()一樣。

實施例:

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

這將打印控制檯和出口上ending it...,退出代碼1.

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

這將打印控制檯和退出,退出代碼2上什麼都沒有。