3 const http
= require('node:http');
4 const { AsyncLocalStorage
} = require('node:async_hooks');
5 const DB
= require('./src/db');
6 const Logger
= require('./src/logger');
7 const Service
= require('./src/service');
8 const Config
= require('./config');
9 const { fileScope
} = require('./src/common');
10 const { version
} = require('./package.json');
12 const _scope
= fileScope(__filename
)('main');
14 const PORT
= process
.env
.PORT
|| 4001;
15 const ADDR
= process
.env
.LISTEN_ADDR
|| '127.0.0.1';
17 (async
function main () {
18 let config
, logger
, db
, service
;
20 // This provides an async context store for persisting unique log data per request, id est a requestId.
21 const asyncLocalStorage
= new AsyncLocalStorage();
23 config
= new Config(process
.env
.NODE_ENV
);
24 logger
= new Logger(config
.logger
, { nodeId: config
.nodeId
}, asyncLocalStorage
);
25 db
= new DB(logger
, config
);
26 await db
.initialize();
27 service
= new Service(logger
, db
, config
, asyncLocalStorage
);
29 http
.createServer(async (req
, res
) => {
30 await asyncLocalStorage
.run({}, async () => {
31 return service
.dispatch(req
, res
);
33 }).listen(PORT
, ADDR
, (err
) => {
35 logger
.error(_scope
, 'error creating server', err
);
38 logger
.info(_scope
, 'server started', { version
, listenAddress: ADDR
, listenPort: PORT
});
41 (logger
|| console
).error(_scope
, 'error starting server', e
);
42 db
?.listener
&& await db
.listener
.stop();