-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
84 lines (75 loc) · 3.54 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
const express = require('express');
const path = require('path');
const cors = require('cors');
const mongoose = require('mongoose');
var sslRedirect = require('heroku-ssl-redirect');
require('dotenv').config(); // n4
require('./utils/globalHelpers');
//Init Express
const app = express();
const ENVIRONMENT = process.env.NODE_ENV || 'development';
const isProduction = ENVIRONMENT === 'production';
console.log("env", ENVIRONMENT);
// DATABASE
const options = {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true, //Applied after DeprecationWarning and goal: new Server Discover and Monitoring engine || // comment this out when this error occurs: MongoTimeoutError: Server selection timed out after 30000 ms || || But be aware that things can not work properly
useFindAndModify: false, // DeprecationWarning: Mongoose: `findOneAndUpdate()` and `findOneAndDelete()` without the `useFindAndModify` option set to false are deprecated
keepAlive: true,
}
mongoose
.connect(process.env.MONGO_KEY, options)
.then(() => console.log(`MongoDB Connected...`))
.catch(err => console.log(err));
// END DATABASE
// MIDDLEWARES
app.use(express.json()); //n1
app.use(cors()); //n2
app.use(sslRedirect()); // n5
// routes
app.use('/api/email', require('./routes/email'));
app.use('/api/user', require('./routes/user'));
app.use('/api/staff-booking', require('./routes/staffBooking'));
app.use('/api/auth', require('./routes/auth'));
app.use('/api/admin', require('./routes/admin'));
app.use('/api/database', require('./routes/database'));
app.use('/api/finance', require('./routes/finance'));
app.use('/api/push-notification', require('./routes/push-notification'));
// Serve static files such as images, CSS files, and JavaScript files for the React frontend <app></app>
isProduction && app.use(express.static(path.join(__dirname, 'client/build')))
// END MIDDLEWARES
// This solves the "Not found" issue when loading an URL other than index.html.
isProduction &&
app.get('/*', (req, res) => { //n3
res.sendFile(path.join(__dirname + '/client/build/index.html'), err => {
if (err) { res.status(500).send(err) }
})
})
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
console.log(`Server listening on port ${PORT}`);
});
// NOTES
// n1: bodyparser middleware - Allow the app to accept JSON on req.body || replaces body-parser package
// you can also includes "app.use(express.urlencoded({extended: false}))"
// n2: this was used before:
/*
// CORS - configure an Express server with CORS headers (because the React app is going to be published in a different port), JSON requests, and /api as the path
// app.use((req, res, next) => {
// res.header("Access-Control-Allow-Origin", "*");
// res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
// res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
// next();
// });
*/
// n3 : resource: https://tylermcginnis.com/react-router-cannot-get-url-refresh/
// prior setting:
/* app.use(express.static(path.join(__dirname, 'client/build')))
// Anything that doesn't match the above, send back index.html
// app.get('*', (req, res) => {
// res.sendFile(path.join(__dirname + 'client/build/index.html')) // the "not found" issue may be occured becase of this path. client requires a slash before.
// })
n4: environment varibles works everywhere with dotenv, including controllers
n5: SSL - secure sockets layer, always redirect to https page.
*/