-
Notifications
You must be signed in to change notification settings - Fork 2
/
server.js
73 lines (65 loc) · 2.16 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
import express from 'express';
import httpProxy from 'http-proxy';
import errorHandler from 'errorhandler';
import path from 'path';
import consolidate from 'consolidate';
import { RouteErrors } from '../app/core/constants';
import { routeUrl, renderRouter } from './react-renderer';
const app = express();
let server;
app.engine('hbs', consolidate.handlebars);
app.set('views', __dirname + '/views');
app.set('view engine', 'hbs');
app.use(errorHandler({
dumpExceptions: true,
showStack: true
}));
app.get('/assets*', function (req, res) {
if (process.env.NODE_ENV == 'development') {
// When webpack is running
let proxy = httpProxy.createProxyServer();
proxy.web(req, res, {target: 'http://localhost:3001'});
} else {
res.sendFile(req.path.substr(7), { root: path.join(__dirname + '/../dist') });
}
});
app.get('*',function(req,res){
routeUrl(req.url)
.then(renderRouter)
.then((renderedRouter) => {
res.render('index', renderedRouter);
})
.catch((renderedRouter) => {
switch (renderedRouter.error) {
case RouteErrors.ROUTING:
res.status(500);
res.render('index', { html: 'Routing error'});
break;
case RouteErrors.REDIRECT:
res.redirect(renderedRouter.route.pathname);
break;
case RouteErrors.NOT_FOUND:
res.status(404);
renderRouter(renderedRouter.props).then((renderedRouter) => res.render('index', renderedRouter));
break;
default:
console.error(renderedRouter.stack || renderedRouter.stacktrace || renderedRouter);
res.status(500);
res.render('index', { html: 'Routing error'});
break;
}
});
});
const startServer = () => {
if (!server) {
server = app.listen(8080);
console.log('port 8080 open');
}
return server;
};
process.on('exit', () => {
if (server) {
server.kill('SIGTERM');
}
});
export default startServer;