-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
145 lines (110 loc) Β· 3.8 KB
/
server.js
File metadata and controls
145 lines (110 loc) Β· 3.8 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
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
// import express library
const express = require('express')
// import for library used to validate user inputs
const expressValidator = require('express-validator')
// import path for working with directory and files
const path = require('path')
// import body parser for processing requests
const bodyParser = require('body-parser')
// import for cookie parsing library
const cookieParser = require('cookie-parser')
// import for session
const session = require('express-session')
// import for mongo storing session
const MongoStore = require('connect-mongo')(session)
// import mongoose for interfacing with mongodb
const mongoose = require('mongoose')
// import library for hanling logins
const passport = require('passport')
// import for flash informations
const flash = require('connect-flash')
// import library to promisify callback
const promisify = require('es6-promisify')
// import routes to be handled
const mainRoutes = require('./routes/main')
const submissionRoutes = require('./routes/submission')
const archiveRoutes = require('./routes/archive')
const authenticationRoutes = require('./routes/authentication')
// import the helpers file
const helpers = require('./helpers')
// import the error handlers
const errorHandlers = require('./handlers/errorHandlers')
// import environment variables
require('dotenv').config({
path: 'variables.env'
})
// create the Express app
const app = express()
// view engine setup
app.set('views', path.join(__dirname, 'views')) // the folder for template files
app.set('view engine', 'pug')
// serve static file in public folder
app.use(express.static(path.join(__dirname, 'public')))
// server universalviewer as static files
app.use(express.static(path.join(__dirname, 'node_modules/universalviewer/dist/uv-2.0.2')))
// turns raw requests into req.body
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
extended: true
}))
// Validator for validating user inputs
app.use(expressValidator())
// populate req.cookies from request
app.use(cookieParser())
// add session mechanism that allow the app to keep the data from visiitors and send flash messages
app.use(session({
secret: process.env.SECRET,
key: process.env.KEY,
resave: false,
saveUninitialized: false,
store: new MongoStore({
mongooseConnection: mongoose.connection,
touchAfter: 24 * 3600 // time period in seconds
})
}))
// Passport.js for handling logins
app.use(passport.initialize())
app.use(passport.session())
const setPassport = require('./config/passport-config')
setPassport(passport)
// Flash middleware for passing message to user requests
app.use(flash())
// pass variables to templates and requests
app.use((req, res, next) => {
res.locals.h = helpers
res.locals.flashes = req.flash()
res.locals.user = req.user || null
res.locals.currentPath = req.path
next()
})
// promisify callback
app.use((req, res, next) => {
req.login = promisify(req.login, req)
next()
})
// handling routes
app.use('/', mainRoutes)
app.use('/submit', submissionRoutes)
app.use('/archive', archiveRoutes)
app.use('/login', authenticationRoutes)
// error handling when route not found
app.use(errorHandlers.notFound)
// check if it is validations errors
app.use(errorHandlers.flashValidationErrors)
// show error stacktrace if in development environment
if (app.get('env') === 'development') {
app.use(errorHandlers.developmentErrors)
}
// production error
app.use(errorHandlers.productionErrors)
// connect to mongodb and handle bad connection
mongoose.connect(process.env.DATABASE)
mongoose.Promise = global.Promise
mongoose.connection.on('error', (err) => {
console.error(`ππππππ β‘ ${err.message}`)
})
// start the app
app.set('port', process.env.PORT || 8888)
const server = app.listen(app.get('port'), () => {
console.log(`Express is running on PORT ${server.address().port}`)
})