forked from bcgov/startup-sample-project-aws-containers
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.js
55 lines (46 loc) · 1.25 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
const app = require('./server.js');
const logger = require('./logger.js');
let dbClient = null;
if ('development' === process.env.NODE_ENV) dbClient = require('./db').dbClient;
const port = 80;
/** @type {http.Server|undefined} */
let server;
// shut down server
async function shutdown() {
if ('development' === process.env.NODE_ENV) await dbClient.disconnect();
if (server) {
server.close((err) => {
if (err) {
logger.error(err);
process.exitCode = 1;
}
process.exit();
});
}
}
// quit on ctrl-c when running docker in terminal
process.on('SIGINT', () => {
logger.info('Got SIGINT (aka ctrl-c in docker). Graceful shutdown ', new Date().toISOString());
shutdown();
});
// quit properly on docker stop
process.on('SIGTERM', () => {
logger.info('Got SIGTERM (docker container stop). Graceful shutdown ', new Date().toISOString());
shutdown();
});
// Start server
(async () => {
try {
if ('development' === process.env.NODE_ENV) await dbClient.connect();
server = app.listen(port, async () => {
logger.info(`Listening on port ${port}`);
});
} catch (err) {
logger.error(err);
shutdown();
}
})();
//
// need above in docker container to properly exit
//
module.exports = server;