Skip to content

Commit 85e5570

Browse files
committed
Improved template, added prod server
1 parent 19c454b commit 85e5570

File tree

7 files changed

+81
-3997
lines changed

7 files changed

+81
-3997
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
node_modules
22
.env
33
dist
4+
package-lock.json
5+
yarn.lock
46

57
/winston
68
/uploads

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "",
55
"main": "index.js",
66
"scripts": {
7-
"dev": "ts-node-dev --respawn --transpile-only src/server.ts",
7+
"dev": "ts-node-dev --respawn --transpile-only src/dev-server.ts",
88
"start": "node dist/server.js",
99
"build": "tsc",
1010
"lint:check": "eslint --ignore-path .eslintignore --ext .js,.ts",

src/config/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ import path from 'path';
33
dotenv.config({ path: path.join(process.cwd(), '.env') });
44

55
export default {
6+
server_name: process.env.SERVER_NAME,
67
ip_address: process.env.IP_ADDRESS,
78
database_url: process.env.DATABASE_URL,
89
node_env: process.env.NODE_ENV,
910
port: process.env.PORT,
11+
port_dev: process.env.PORT_DEV,
1012
bcrypt_salt_rounds: process.env.BCRYPT_SALT_ROUNDS,
1113
jwt: {
1214
jwt_secret: process.env.JWT_SECRET,

src/dev-server.ts

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import colors from 'colors';
2+
import mongoose from 'mongoose';
3+
import { Server } from 'socket.io';
4+
import app from './app';
5+
import config from './config';
6+
import { seedSuperAdmin } from './DB/seedAdmin';
7+
import { socketHelper } from './helpers/socketHelper';
8+
import { errorLogger, logger } from './shared/logger';
9+
10+
//uncaught exception
11+
import process from 'process';
12+
13+
process.on('uncaughtException', error => {
14+
errorLogger.error('UnhandleException Detected', error);
15+
process.exit(1);
16+
});
17+
18+
let server: any;
19+
async function main() {
20+
try {
21+
mongoose.connect(config.database_url as string);
22+
logger.info(colors.green('🚀 Database connected successfully'));
23+
24+
//Seed Super Admin after database connection is successful
25+
await seedSuperAdmin();
26+
27+
const port =
28+
typeof config.port_dev === 'number' ? config.port_dev : Number(config.port_dev);
29+
30+
server = app.listen(port, config.ip_address as string, () => {
31+
logger.info(
32+
colors.yellow(`♻️ Application listening on port:${port}`)
33+
);
34+
});
35+
36+
//socket
37+
const io = new Server(server, {
38+
pingTimeout: 60000,
39+
cors: {
40+
origin: '*',
41+
},
42+
});
43+
socketHelper.socket(io);
44+
//@ts-ignore
45+
global.io = io;
46+
} catch (error) {
47+
console.error(error);
48+
errorLogger.error(colors.red('🤢 Failed to connect Database'));
49+
}
50+
51+
//handle unhandleRejection
52+
process.on('unhandledRejection', error => {
53+
if (server) {
54+
server.close(() => {
55+
errorLogger.error('UnhandleRejection Detected', error);
56+
process.exit(1);
57+
});
58+
} else {
59+
process.exit(1);
60+
}
61+
});
62+
}
63+
64+
main();
65+
66+
//SIGTERM
67+
process.on('SIGTERM', () => {
68+
logger.info('SIGTERM IS RECEIVE');
69+
if (server) {
70+
server.close();
71+
}
72+
});

src/server.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ async function main() {
2828
typeof config.port === 'number' ? config.port : Number(config.port);
2929

3030
server = app.listen(port, config.ip_address as string, () => {
31-
logger.info(
32-
colors.yellow(`♻️ Application listening on port:${config.port}`)
33-
);
31+
logger.info(colors.yellow(`♻️ Application listening on port:${port}`));
3432
});
3533

3634
//socket

src/shared/logger.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import path from 'path';
22
import DailyRotateFile from 'winston-daily-rotate-file';
3+
import config from '../config';
34
const { createLogger, format, transports } = require('winston');
45
const { combine, timestamp, label, printf } = format;
56

@@ -26,7 +27,7 @@ const myFormat = printf(
2627

2728
const logger = createLogger({
2829
level: 'info',
29-
format: combine(label({ label: 'SERVER-NAME' }), timestamp(), myFormat),
30+
format: combine(label({ label: config.server_name }), timestamp(), myFormat),
3031
transports: [
3132
new transports.Console(),
3233
new DailyRotateFile({
@@ -45,7 +46,7 @@ const logger = createLogger({
4546

4647
const errorLogger = createLogger({
4748
level: 'error',
48-
format: combine(label({ label: 'SERVER-NAME' }), timestamp(), myFormat),
49+
format: combine(label({ label: config.server_name }), timestamp(), myFormat),
4950
transports: [
5051
new transports.Console(),
5152
new DailyRotateFile({

0 commit comments

Comments
 (0)