1 | const express = require('express');
|
2 | const morgan = require('morgan');
|
3 | const bodyParser = require('body-parser');
|
4 |
|
5 | const { join, resolve } = require('path');
|
6 |
|
7 | if (!(process.env.APP_ROOT_PATH)) process.env.APP_ROOT_PATH = resolve();
|
8 |
|
9 | const appRootPath = (...paths) => join(process.env.APP_ROOT_PATH, ...paths);
|
10 | const cors = require('./cors');
|
11 | const routes = require('./app-route');
|
12 | const proxy = require('./proxy');
|
13 |
|
14 | const Server = () => {
|
15 | const { createServer } = require('http');
|
16 |
|
17 | const config =Object.assign({}, require('./server-config'));
|
18 |
|
19 | const folderRoot = config.folders.find(folder => (folder['root'] && folder['root'] === true));
|
20 | const appRootPathDist = appRootPath(folderRoot.path);
|
21 |
|
22 | const app = express();
|
23 |
|
24 | app.use('/', express.static(appRootPathDist));
|
25 |
|
26 | app.use(bodyParser.json());
|
27 | app.use(morgan('dev'));
|
28 | app.use(cors);
|
29 |
|
30 | if (config['folders']){
|
31 | config.folders.forEach(folder => {
|
32 | if (typeof(folder) === 'string'){
|
33 | app.use(`/${folder}`, express.static(appRootPath(folder)));
|
34 | } else {
|
35 | app.use(`/${folder.route}`, express.static(appRootPath(folder.path)));
|
36 | }
|
37 | });
|
38 | }
|
39 |
|
40 | config.proxyServers.forEach(proxyServer => proxy(proxyServer, app));
|
41 |
|
42 | routes(app, appRootPath('server'));
|
43 |
|
44 | app.all('/*', (req, res) => res.sendFile('index.html', { root: appRootPathDist }));
|
45 |
|
46 | return {
|
47 | start () {
|
48 | const server = createServer(app);
|
49 | server.listen(config.port, config.ip)
|
50 | .on('listening', () => {
|
51 | const { port, address } = server.address();
|
52 | console.log(`Express server started on port ${port} at ${address}.`);
|
53 | });
|
54 | }
|
55 | }
|
56 |
|
57 | }
|
58 |
|
59 | module.exports = Server;
|