@apolitical/server
Version:
Node.js module to encapsulate Apolitical's express server setup
40 lines (34 loc) • 1.08 kB
JavaScript
;
module.exports = ({ express, httpTerminator, logger, expressLoader }) => {
let app = null;
let terminator = null; // I need your clothes, your boots and your motorcycle
function expressRunner(app, port) {
return new Promise((resolve, reject) => {
if (!port) {
return reject(new Error('Cannot start server without port option'));
}
const server = app.listen(port, () => {
const runnerLogger = logger.where(__filename, 'expressRunner');
runnerLogger.info(`Server listening on ${port}`);
return resolve();
});
terminator = httpTerminator.createHttpTerminator({ server });
});
}
async function startup(opts) {
// Create, load and run the express app
if (!app) {
app = express();
await expressLoader(app, opts);
await expressRunner(app, opts.port);
}
return app;
}
async function shutdown() {
// Terminate process and clean-up variables
await terminator.terminate();
app = null;
terminator = null;
}
return { startup, shutdown };
};