website/server.js
RedDucks e52ccfdfd8 Added morgan, removed body-parser, misc changes
Added morgan for some route debugging. Removed body-parser since it's built into express now. Made some error returns more clear and modern-ized some random snippets
2018-11-23 23:41:09 -05:00

109 lines
2.8 KiB
JavaScript

/*
server.js -
the file that contains the startup code
*/
// imports
const express = require('express');
const handlebars = require('express-handlebars');
const session = require('express-session');
const mongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
const morgan = require('morgan');
const config = require('./config.json');
const utilHelper = require('./helpers/util');
const passportconfig = require('./passport.config.js');
// setup console colors
require('colors');
// fix database deprecation warnings
mongoose.set('useCreateIndex', true);
mongoose.set('useNewUrlParser', true);
// setup database connection
mongoose.connect(config.database.url);
const connection = mongoose.connection;
connection.on('error', console.error.bind(console, 'connection error:'));
// setup express
const app = express();
app.use(morgan('dev'));
app.use(express.json());
app.use(express.urlencoded({
extended: true
}));
app.use(session({
secret: config.secrets.session,
saveUninitialized: true,
resave: true,
cookie: {
maxAge: 3600000,
httpOnly: true//, // remove on production
/*secure: true*/ // uncomment on production
},
// permanent session storing for MongoDB
store: new mongoStore({
mongooseConnection: connection,
collection: 'sessions'
})
}));
// setups up passportjs authentication
passportconfig(app);
// handlebars templating setup
const hbsEngine = handlebars({
extname: '.hbs',
layoutsDir: 'views',
partialsDir: 'views/partials',
helpers: {
'if_eq': function(a, b, opts) {
if(a == b) return opts.fn(this);
else return opts.inverse(this);
},
'if_neq': function(a, b, opts) {
if(a != b) return opts.fn(this);
else return opts.inverse(this);
}
}
});
app.engine('.hbs', hbsEngine);
app.set('view engine', '.hbs');
// locations and routes setup
const locations = {
home: require('./routes/home'),
posts: require('./routes/blog'),
admin: require('./routes/admin'),
contact: require('./routes/contact'),
progress: require('./routes/progress'),
pnid: require('./routes/pnid')
};
// static files
app.use('/assets', express.static('assets'));
// page map
app.use('/', locations.home);
app.use('/', locations.contact);
app.use('/', locations.posts);
app.use('/', locations.admin);
app.use('/', locations.progress);
app.use('/', locations.pnid);
app.use((request, response) => {
return utilHelper.send404(response);
});
// TODO improve error handling
// TODO remove param decoding errors from logs example: "host/test/%"
// 4 parameters required to read the error, cant help the eslint error
app.use((error, request, response, next) => { // eslint-disable-line no-unused-vars
console.warn(error.stack);
return response.status(500).send('Something broke!');
});
// startup
app.listen(config.http.port, () => {
console.log(`started the server on port: ${new String(config.http.port).green}`);
});