-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
152 lines (141 loc) · 5.73 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/////////////////////////////////////////////////////////////////////////////////////
// MODULES //////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
const express = require('express');
const cors = require('cors');
const crypto = require('crypto');
const compression = require('compression');
const session = require('express-session');
const bodyParser = require('body-parser');
const logger = require('morgan');
const chalk = require('chalk');
const helmet = require('helmet');
const errorHandler = require('errorhandler');
const dotenv = require('dotenv');
const flash = require('express-flash');
const MongoStore = require('connect-mongo')(session);
const path = require('path');
const mime = require('mime');
const mongoose = require('mongoose');
const passport = require('passport');
const expressValidator = require('express-validator');
const swaggerJSDoc = require('swagger-jsdoc');
const chokidar = require('chokidar');
const config = require('./config/config');
require('dotenv').config();
const app = (module.exports = express());
/////////////////////////////////////////////////////////////////////////////////////
// SWAGGER //////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
const hostVar = process.env.NODE_ENV === 'production' ? 'moveet-api.herokuapp.com' : 'localhost:3001';
let swaggerDefinition = {
info: {
title: 'Moveet API',
version: '1.0.0',
description: `This is the documentation for the Moveet API. Moveet is a unique platform that connects movie lovers to help them share their passion with people in real life (IRL), find out more about us at http://moveet.simongodefroid.com`,
termsOfService: `http://swagger.io/terms/`,
contact: { email: `[email protected]` }
},
host: hostVar,
basePath: '/api'
};
let options = {
swaggerDefinition: swaggerDefinition,
apis: ['./api/modules/*/*Routes.js']
};
let swaggerSpec = swaggerJSDoc(options);
/////////////////////////////////////////////////////////////////////////////////////
// MONGOOSE /////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
mongoose.Promise = global.Promise;
mongoose.connect(process.env.MONGODB_URI);
mongoose.connection.on('error', () => {
console.log('MongoDB Connection Error. Please make sure that MongoDB is running.');
process.exit(1);
});
/////////////////////////////////////////////////////////////////////////////////////
// EXPRESS //////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.set('superSecret', config.secret);
app.use(express.static('public'));
app.use(logger('dev'));
app.use(helmet());
app.use(compression());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressValidator());
app.use(
session({
resave: true,
saveUninitialized: true,
secret: process.env.SESSION_SECRET,
store: new MongoStore({
url: process.env.MONGODB_URI,
autoReconnect: true,
clear_interval: 3600
})
})
);
app.use(errorHandler());
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use((req, res, next) => {
res.locals.user = req.user;
next();
});
app.use(express.static(path.join(__dirname, 'public'), { maxAge: 31557600000 }));
app.use('/api', cors());
app.get('/', (req, res) => {
res.send('API ready');
});
app.get('/swagger.json', (req, res) => {
res.setHeader('Content-Type', 'application/json');
res.send(swaggerSpec);
});
/////////////////////////////////////////////////////////////////////////////////////
// ROUTES ///////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
require('./api/modules/auth/authRoutes')(app);
require('./api/modules/users/userRoutes')(app);
require('./api/modules/movies/movieRoutes')(app);
require('./api/modules/showtimes/showtimeRoutes')(app);
require('./api/modules/theaters/theaterRoutes')(app);
/////////////////////////////////////////////////////////////////////////////////////
// CHOKIDAR /////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
// const incomingData = require('./incomingData.js');
// const watcher = chokidar.watch('./incoming', {
// ignored: /(^|[\/\\])\../,
// persistent: true,
// ignoreInitial: true
// });
// const log = console.log.bind(console);
// // Add event listeners.
// watcher.on('add', path => {
// log(`File ${path} has been added`);
// incomingData.importData(path);
// });
/////////////////////////////////////////////////////////////////////////////////////
// EXPRESS ERROR HANDLING ///////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
app.all('*', (req, res) => {
res.status(404).json({
error: 'Not Found'
});
});
/////////////////////////////////////////////////////////////////////////////////////
// EXPRESS START UP /////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
app.listen(app.get('port'), () => {
console.log(
'%s App is running at http://localhost:%d in %s mode',
chalk.green('✓'),
app.get('port'),
app.get('env')
);
console.log(' Press CTRL-C to stop\n');
});