resume/src/node/Server.js
2017-02-20 22:31:39 +01:00

95 lines
2.7 KiB
JavaScript
Executable File

const path = require('path');
const express = require('express');
const request = require('request-promise');
const Config = require('./Config');
const Util = require('./Util');
const person = require('../person.js');
const http = require('http');
const reload = require('reload');
let app, resumes;
const Server = {
/**
* sets configurations of express app
*/
setup: function() {
if (!app) app = express();
app.set('views', path.join(__dirname, '../../resumes'));
app.engine('mustache', require('hogan-express'));
app.set('view engine', 'mustache');
app.use(express.static(path.join(__dirname, '../../public')));
app.use(express.static(path.join(__dirname, '../../node_modules')));
},
/**
* starts up express app
*/
start: function() {
app.listen(Config.port, '0.0.0.0', () => console.log('Listening on localhost:' + Config.port + '!'));
},
/**
* kills express app
*/
kill: function() {
request.get('http://localhost:' + Config.port + '/kill')
.catch(error => {
if (error) return false;
});
},
/**
* sets route of express app
* @param {string} path e.g. '/' or '/resumes'
* @param {string} template e.g. 'views/resumeX/index'
*/
setRoute: function(path, template) {
app.get(path, (req, res) => {
let style = null;
const stylePath = path.replace('/', '');
if (path != '') style = stylePath;
res.render('views/layout', {
partials: {
content: template
},
style: style,
resumes: resumes,
person: person
});
});
},
/**
* sets route to kill app
*/
setKillRoute: function() {
app.get('/kill', () => process.exit());
},
/**
* sets routes for each resume
*/
setRoutesForResumes: function() {
const directories = Util.getDirectories();
for (let resume of directories) {
Server.setRoute('/' + resume, resume + '/index');
}
},
autoReload: function() {
const server = http.createServer(app);
reload(server, app);
},
/**
* run server
* @return {Promise} resolves when server is running
*/
run: async function() {
resumes = Util.getResumesFromDirectories();
Server.setup();
Server.setRoute('/', 'views/index');
Server.setRoutesForResumes();
Server.setKillRoute();
Server.kill();
await Util.setTimeout(500);
Server.autoReload();
Server.start();
}
};
module.exports = Server;