2016-05-10 7 views
1

ich in meinem app.js den folgenden Code haben:auf node.js ein ordnungsgemäßes Herunterfahren Debuggen

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"})); 

ich alles gelesen, dass es über anmutig zu lesen ist heruntergefahren node.js Server aber nicht finden konnten alles darüber, wie man es debuggt.

Das Problem ist, dass IDE den Knotenprozess beenden/beenden muss, wenn Sie in der Debug-Konsole auf die Schaltfläche "Stop" klicken.

Hat jemand eine Idee, wie kann ich meinen eleganten Shutdown-Code debuggen? Der Debug-Modus stoppt nie an Haltepunkten in exitHandler beim Herunterfahren der Debug-Sitzung.

Ich benutze WebStorm, aber ich habe gelesen, dass das gleiche wahrscheinlich auch auf anderen IDEs passiert.

Dank

Antwort

2

Nun, es gibt keine Magie. Um 'exit' Ereignis zu erhalten, muss Ihr Code schließlich process.exit() Code erreichen, und um 'uncaughtException' zu erhalten, müssen Sie unbehandelte Ausnahme auslösen.

Vielleicht gibt es eine wahnsinnige Möglichkeit, diesen Code auszulösen, ohne tatsächliche Ereignisse zu erzeugen, aber Sie sollten den normalen Programmlebenszyklus einhalten, denn so läuft alles in der Produktion - und das wollen Sie unbedingt testen.

zur Praxis: Wenn Sie einmal, um zu sehen, ob Sie richtig sind, können Sie nur manuell nur, um Ihre Anwendung richtigen Code hinzufügen, so wird es ausgelöst werden, sobald sie geladen ist:

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

Debug, dann entfernen.

Wenn Sie planen, dies in einigen Tests, um irgendwie zu integrieren, müssen Sie innerhalb von Code folgendes Verhalten zu halten, und fügen Sie einen Weg, um es auszulösen:

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

und eine Ausführungs Szenario fügen Sie es laufen mit richtige Option:

$ NODE_TEST_TRIGGER_PROCESS_EXIT=true node myapp.js 

UPD: Wenn Sie wirklich über die verschiedenen Ereignisse sich nicht, überprüfen Sie andere Signale: https://nodejs.org/api/process.html#process_signal_events Vielleicht App SIGINT oder SIGTERM empfangen wird. Aber wenn es SIGKILL ist, können Sie es immer noch nicht fangen, also müssen Sie selbst ein Ereignis erstellen.

Verwandte Themen