當我的Express.js服務被SIGINT
停止時,我需要做一些有用的事情。使用Express.js版本3.0.6,據我所知,這應該工作:如何正確使用Express.js處理SIGINT?
var express = require('express');
var app = express();
var server = app.listen(3000);
process.on('SIGINT', function() {
console.log('Do something useful here.');
server.close();
});
但是這個過程並沒有給我回Bash提示符,除非我發出SIGINT
(控制 - Ç)兩次:
$ 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)
$
還有一點需要注意。如果我啓動此Express.js服務並且不發送任何請求,則SIGINT
正確終止。
顯然有一些基本的東西我在這裏失蹤?
使用'process.exit()'是像你這樣一兩件事,不應該正常(恕我直言)考慮後發送^ C。我認爲更完整的答案在下面(儘管有點晚)。 – Whyhankee