Potrzebuję zrobić kilka przydatnych rzeczy, gdy moja usługa Express.js została zatrzymana przez SIGINT
. Korzystanie Express.js wersję 3.0.6, rozumiem, że to powinno działać:Jak poprawnie obsłużyć SIGINT za pomocą Express.js?
var express = require('express');
var app = express();
var server = app.listen(3000);
process.on('SIGINT', function() {
console.log('Do something useful here.');
server.close();
});
Ale proces nie daje mi monit bash chyba wydać SIGINT
(Kontrola - C) dwa razy:
$ node problem.js
^CDo something useful here.
^CDo something useful here.
net.js:1046
throw new Error('Not running');
^
Error: Not running
at Server.close (net.js:1046:11)
at process.<anonymous> (/path/to/problem.js:8:10)
at process.EventEmitter.emit (events.js:93:17)
at SignalWatcher.startup.processSignalHandlers.process.on.process.addListener.w.callback (node.js:486:45)
$
Jeszcze jedno zastrzeżenie. Jeśli uruchomię tę usługę Express.js i nie wyślę żadnych żądań, wtedy SIGINT
zakończy się poprawnie.
Najwyraźniej jest coś fundamentalnego, czego tu brakuje?
Korzystanie 'process.exit()' jest jak wysyłanie^C po zrobił jedną rzecz i nie powinny być traktowane z wdziękiem (imho). Myślę, że bardziej kompletna odpowiedź jest poniżej (choć trochę spóźniona). – Whyhankee