UNPKG

@apolitical/server

Version:

Node.js module to encapsulate Apolitical's express server setup

40 lines (34 loc) 1.08 kB
'use strict'; 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 }; };