-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
155 lines (120 loc) · 4.02 KB
/
app.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
'use strict';
/***************************************
* App startup script
***************************************/
const MODULENAME = 'StartupApp';
/**
* Startup script
*/
require('module-alias/register');
require('@root/config/paths-alias.config');
/**
* 3rd party imports
*/
const pathAlias = require('path-alias');
const express = require('express');
const morgan = require('morgan');
const cors = require('cors');
const path = require('path');
const cookieParser = require('cookie-parser');
const app = express();
/**
* App imports
* Note: ./common/ids.service MUST be the first script to be loaded for App because it contains IDs that are used by ALL other modules
*/
const CommonIDsSvc = require('@root/common/ids.service');
const ErrorMsgsSvc = require('@root/common/error-messages.service');
const logger = require('@root/config/winston.config');
const APIResponseModel = require('@root/common-models/response.model');
const TaskModel = require('@root/common-models/task.model');
const AppError = require('./common/apperror.class');
/**
* Internal variables
*/
let _serverUniqueID = null;
const _apiRouter = express.Router();
/**
* Initialize app
*/
function initApp() {
const taskName = 'initApp()';
try {
// create server/instance unique ID
_serverUniqueID = process.env.SERVERUNIQUEID;
// add new token to morgan
morgan.token('reqUniqueid', function(req) {
return req.reqUniqueID || '--N/A--';
});
// overriding 'combined' to include evUniqueID
app.use(morgan('[:reqUniqueid] :remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"', { stream: logger.stream }));
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
//middlewares
app.use(require('./middlewares/default.middleware'));
// root route
let apiRoot = process.env.APIROOT || '';
let apiVersion = process.env.APIVERSION || 'v1';
let baseRoute = `/${apiRoot !== '' ? apiRoot + '/' : ''}${apiVersion !== '' ? apiVersion : ''}/`;
logger.logInfo(_serverUniqueID, MODULENAME, taskName, `Base route: ${baseRoute}`);
app.use(baseRoute, _apiRouter);
initPing();
initCatchAllRoute();
initErrorRoute();
} catch (e) {
AppError.setModuleAndTaskForError(e, MODULENAME, taskName);
logger.logError(_serverUniqueID, MODULENAME, taskName, e);
logger.logInfo(_serverUniqueID, MODULENAME, taskName, 'Exiting server due to error during initializing app');
process.exit(1);
}
}
/**
* Initialize default PING
*/
function initPing() {
// default ping
_apiRouter.get('/ping', (req, res) => {
const taskName = '/ping';
const resp = new APIResponseModel();
const task = TaskModel.createTask(MODULENAME, taskName, null);
resp.setMetaData(req.responseMetaData);
task.endTask('Health checks');
resp.endResponse(0, 'Health checks passed', null, task);
logger.logDebug(req.reqUniqueID, MODULENAME, taskName, 'Health checks');
res.status(200).send(resp.toObject());
});
}
/**
* Initialize catch all route (undefined routes)
*/
function initCatchAllRoute() {
app.all('*', (req, res) => {
const taskName = 'undefinedroute';
const resp = new APIResponseModel();
resp.setMetaData(req.responseMetaData);
resp.endResponse(1, 'Route does not exist', null, null);
logger.logDebug(req.reqUniqueID, MODULENAME, taskName, 'Route does not exist');
res.status(404).send(resp.toObject());
});
}
/**
* Initialize error route
*/
function initErrorRoute() {
app.use((e, req, res, next) => {
const taskName = 'errorroute';
const resp = new APIResponseModel();
resp.setMetaData(req.responseMetaData);
resp.endResponse(1, 'Unexpected exception', e, null);
logger.logError(req.reqUniqueID, MODULENAME, taskName, e);
res.status(500).send(resp.toObject());
});
}
// init app
initApp();
/**
* Exports
*/
module.exports = app;