|
|
|
|
|
|
|
|
|
|
|
var exitHandlers = []
|
|
|
|
var exitHandled = false;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add a callback for closing programm bacause of any reason
|
|
|
|
*
|
|
|
|
* @param callback a sync function
|
|
|
|
*/
|
|
|
|
export function registerExitHandler(callback: () => void) {
|
|
|
|
exitHandlers.push(callback);
|
|
|
|
}
|
|
|
|
|
|
|
|
function exitHandler(options, err?) {
|
|
|
|
if(exitHandled) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
exitHandled = true;
|
|
|
|
for(let i = 0; i < exitHandlers.length; i++) {
|
|
|
|
exitHandlers[i]();
|
|
|
|
}
|
|
|
|
console.log('process exit');
|
|
|
|
process.exit();
|
|
|
|
}
|
|
|
|
|
|
|
|
function catchException(options, err) {
|
|
|
|
console.log('Server exception:');
|
|
|
|
console.log(err);
|
|
|
|
exitHandler({ exit: true });
|
|
|
|
}
|
|
|
|
|
|
|
|
//do something when app is closing
|
|
|
|
process.on('exit', exitHandler.bind(null, { cleanup:true }));
|
|
|
|
|
|
|
|
//catches ctrl+c event
|
|
|
|
process.on('SIGINT', exitHandler.bind(null, { exit:true }));
|
|
|
|
|
|
|
|
// catches "kill pid" (for example: nodemon restart)
|
|
|
|
process.on('SIGUSR1', exitHandler.bind(null, { exit:true }));
|
|
|
|
process.on('SIGUSR2', exitHandler.bind(null, { exit:true }));
|
|
|
|
|
|
|
|
//catches uncaught exceptions
|
|
|
|
process.on('uncaughtException', catchException.bind(null, { exit:true }));
|