2014-01-17 11 views

Antwort

37

process.exit() ist der äquivalente Aufruf.

+6

Sie sind nicht gleichwertig. PHPs 'die()' beendet den Server nicht, wie Node.js 'process.exit() 'tut, es stoppt lediglich die Beendigung des verbleibenden Codes in der Datei. Es gibt leider kein Äquivalent. –

+1

@MMiller Das ist teilweise richtig, weil PHP eine völlig andere Architektur hat. PHP ist aus CGI entstanden, in diesem Fall (d. H. Ein einzelner Prozess, der das CGI-Skript ausführt) scheint es mir genau gleich zu sein, da es den Prozess stoppt. Ich betrachte FCGI und ähnliche Technologien lediglich als Optimierung als Gamechanger in dieser Frage. Ich denke daher, dass Ihre Probleme ziemlich pingelig sind und keine realen Probleme IMO widerspiegeln. Ganz ähnlich könnte man sagen, dass das Ausführen mehrerer Supervisord-gestarteter Noten-Instanzen hinter einem Reverse-Proxy dazu führen würde, dass 'process.exit()' den Server nicht stoppt. –

+1

Sie können auch return verwenden, wenn Sie nicht in einer Funktion sind. Es gibt jedoch einige Unterschiede. Siehe meine Antwort für weitere Details. @MMiller Ich denke, das könnte mehr sein, was du meinst? –

11

Ich würde throw verwenden. Throw bewirkt, dass die aktuelle Anfrage beendet wird und beendet den Knotenprozess nicht. Sie können diese Ausgabe mit Ihrer Fehleransicht abfangen.

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

Der Vorteil von 'throw' gegenüber' process.exit() 'ist IMO, dass Sie eine Fehlermeldung haben. Der Nachteil (oder manchmal ein Vorteil) ist, dass es irgendwo eingefangen werden kann. Daher würde ich es nicht als ein "Die()" Äquivalent betrachten, sondern als eine Alternative für viele Anwendungsfälle, die man in Betracht ziehen sollte. –

+0

Up-stimme dies! Ich würde viel lieber "werfen" und meinen "Fang" in Ordnung bringen, anstatt den gesamten Webserver zu vernichten. – AvadData

+0

@AvadData Das hängt eindeutig von Ihrem Anwendungsfall ab.Die Frage ist eindeutig für ein Äquivalent zu "die()", während "werfen" wäre äquivalent zu "werfen" ... –

3

Es zu stderr berichten muss (statt stdout) und Ausgang mit einem Nicht-Null-Status() sterben ...

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

Wenn nicht in einer Funktion, können Sie :

return; 

Sie können aber auch den Vorschlag von @UliKöhler verwenden:

process.exit(); 

Es gibt einige Unterschiede:

  • return endet anmutiger. process.exit() abrupter.
  • return setzt nicht den Exit-Code, wie process.exit() tut.

Beispiel:

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

Dies wird mit Exit-Code ending it... auf der Konsole und Ausfahrt drucken 1.

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

Dies wird 2 nichts auf der Konsole und Ausgang mit Exit-Code drucken.