-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathserver.mjs
More file actions
93 lines (75 loc) · 2.02 KB
/
server.mjs
File metadata and controls
93 lines (75 loc) · 2.02 KB
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
// server.mjs
import 'dotenv/config'
// Express related
import express from 'express';
import session from 'express-session';
import fileUpload from 'express-fileupload';
import cors from 'cors';
import cookieParser from 'cookie-parser';
// Discord Oauth
import passport from 'passport';
import './DiscordStrategy.mjs'
// Router
import { WebsiteRouter, loadPages } from './routers/WebsiteRouter.mjs';
// Prisma DB
import prisma from './database/Prisma.mjs';
// Swagger
import swaggerUi from 'swagger-ui-express';
import swaggerSpec from './swagger.mjs';
// Chalk for beautiful term colors
import chalk from 'chalk';
const app = express();
const PORT = process.env.PORT || 2565;
const startServer = async () => {
try {
// proxy & cors
app.enable('trust proxy');
app.use(cors({
origin: process.env.FRONTEND_URL,
credentials: true,
}));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
// Sessions
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
store: new session.MemoryStore(),
cookie: {
secure: true, // HTTPS
httpOnly: true,
maxAge: parseInt(process.env.COOKIE_MAXAGE)
}
}));
// Passport
app.use(passport.initialize());
app.use(passport.session());
// Files upload
app.use(fileUpload());
// Pages router
await loadPages();
app.use('/', WebsiteRouter);
// Swagger docs
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
app.use(express.static('public'));
app.listen(PORT, () => {
console.log(chalk.cyan(`Server is running on port ${PORT}`));
});
} catch (error) {
console.error(chalk.red('Error starting the server:', error));
}
};
const run = async () => {
startServer()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
}
export { run };