-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
131 lines (92 loc) · 3.1 KB
/
server.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
"use strict";
const express = require("express");
const app = express();
const dotenv = require("dotenv");
const helmet = require("helmet");
const cors = require("cors");
const path = require("path")
const connectDB = require("./server/database/connection");
const session = require("express-session");
const MongoStore = require("connect-mongo");
const fileUpload = require("express-fileupload");
const compression = require("compression");
const swaggerUI = require("swagger-ui-express")
const YAML = require("yamljs")
const swaggerJsDoc = YAML.load("./api.yaml") // Load the documentation file for swagger
const logger = require("./logger")
// load config file
dotenv.config({ path: "./config/config.env" });
// Connect Database
connectDB();
const Port = process.env.PORT || 8080;
// Gzip Compression
app.use(compression({
level: 6,
}))
// Middlewares
app.use(cors());
app.use(express.json());
app.use(helmet())
// Configure Content Security Policy of helmet
app.use(
helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'"],
styleSrc: ["'self'", 'https://cdn.tailwindcss.com'],
imgSrc: ["'self'", 'https://res.cloudinary.com'], // Allow images from Cloudinary
},
})
);
// load body parser
app.use(express.urlencoded({ extended: false }));
// Express file uploads configuration
app.use(
fileUpload({
useTempFiles: true,
tempFileDir: path.join(__dirname, "tmp"),
createParentPath: true,
limits: {
fileSize: 6 * 1024 * 1024 * 8, // 6mb max
},
})
);
app.use(
session({
secret: process.env.SESSION_SECRETE,
resave: false,
saveUninitialized: false,
store: MongoStore.create({ mongoUrl: process.env.MONGO_URI }),
cookie: {
maxAge: 900000, // 15 minutes in milliseconds
},
})
);
// set global variables
app.use((req, res, next) => {
res.locals.user = req.session.user
next();
});
// set Logger globally
global.logger = logger
// load static files
app.use("/img", express.static(path.resolve(__dirname, "./public/img")));
app.get("/", (req, res) => {
res
.status(200)
.send(
`<H1 style="background-color: teal; color : #fff; text-align: center; padding: 20px" >WELCOME To Veerified Fintech Blog. !!!</h1> <br> <br> <span style = "font-size: 12px"> Developed by Udeze Ernest and team</span> <br> <br> <h3><a href="/api-docs" target="_blank">Click Here For Documentaion</a> </h3>`
);
});
// API EndPoints
app.use("/secure", require("./server/routes/authRoute")); // Auth Route
app.use("/posts", require("./server/routes/postRoute")) // Posts Route
app.use("/categories", require("./server/routes/categoryRoute")); // Category Route
app.use("/users", require("./server/routes/userRoute")) // User Route
app.use("/comments", require("./server/routes/commentRoute")) // Comments Route
app.use("/trades", require("./server/routes/tradeRoute"))
app.use("/api-docs", swaggerUI.serve, swaggerUI.setup(swaggerJsDoc)) // Configure Swager documention
app.use((req, res) => {
res.send("Page Not Found");
});
app.listen(Port, () => console.log("server listening to port " + Port));