From 0114e8f450f6b284f996e9d13c92a24069bb3f02 Mon Sep 17 00:00:00 2001 From: Nathan DECHER Date: Sat, 12 Jan 2019 13:50:03 +0100 Subject: [PATCH] added real close sequence and a bit more logging --- index.js | 15 +++++++++------ src/db.js | 10 +++++----- src/express.js | 14 +++++++++++++- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/index.js b/index.js index a63ee87..1952d21 100644 --- a/index.js +++ b/index.js @@ -19,6 +19,11 @@ shared.config=function(namespace, key) { return config[namespace][key]; }; +// create global event emitter +const EE=require('events'); +const events=new EE(); +shared.events=events; + // load database require('./src/db'); @@ -26,12 +31,10 @@ require('./src/db'); require('./src/express'); // setup signal handlers to exit -((a => { - [].forEach.call(['int', 'term', 'hup'], a); -})(s => { +['int', 'term', 'hup'].forEach(s => { s='SIG'+s.toUpperCase(); process.on(s, () => { - log.notice("Exiting on "+s); - process.exit(0); + log.notice("Exiting due to "+s); + events.emit('die', s); }); -})); +}); diff --git a/src/db.js b/src/db.js index 03b1fde..6858e4a 100644 --- a/src/db.js +++ b/src/db.js @@ -24,10 +24,10 @@ try { } // add close handlers -process.on('exit', () => db.close()); -process.on('SIGINT', () => db.close()); -process.on('SIGHUP', () => db.close()); -process.on('SIGTERM', () => db.close()); +shared.events.on('die', () => { + db.close(); + log.notice("Closed database"); +}); // execute db migrations automatically (() => { @@ -57,7 +57,7 @@ process.on('SIGTERM', () => db.close()); } }); -log.info("Database is ready"); +log.notice("Database is ready"); shared.db=db; module.exports=db; diff --git a/src/express.js b/src/express.js index f9b92bb..c266e9e 100644 --- a/src/express.js +++ b/src/express.js @@ -1,3 +1,8 @@ +// load libs +const shared=require('../shared'); +const db=require('./db'); +const log=require('log').get('express'); + // create and setup an app const express=require('express'); const app=express(); @@ -9,5 +14,12 @@ app.set('views', process.cwd()+'/views'); // allow EJS views to be loaded app.use(express.static(process.cwd()+'/static')); // allow static resources to be served // listen on either the port given in env (or loaded from config) or 3000 -app.listen(process.env.PORT || 3000, process.env.ADDRESS || '0.0.0.0'); +const server=app.listen(process.env.PORT || 3000, process.env.ADDRESS || '0.0.0.0', () => { + log.notice("Webserver listening on "+(process.env.ADDRESS || '0.0.0.0')+":"+(process.env.PORT || 3000)); +}); +// setup exit handler +shared.events.on('die', () => { + log.notice("Closing webserver"); + server.close(() => log.notice("Closed webserver")); +});