1 |
|
2 |
|
3 | const _ = require('lodash');
|
4 | const bodyParser = require('body-parser');
|
5 | const compression = require('compression');
|
6 | const cookieParser = require('cookie-parser');
|
7 | const cookieSession = require('cookie-session');
|
8 | const express = require('express');
|
9 | const i18nFsBackend = require('i18next-node-fs-backend');
|
10 | const i18nMiddleware = require('i18next-express-middleware');
|
11 | const i18next = require('i18next');
|
12 |
|
13 | const cache = require('./cache');
|
14 | const cls = require('./cls');
|
15 | const config = require('./config');
|
16 | const db = require('./db/db');
|
17 | const errorHandler = require('./connect/errorhandler');
|
18 | const flash = require('./connect/flash');
|
19 | const locals = require('./connect/locals');
|
20 | const multipart = require('./connect/multipart');
|
21 | const validator = require('./connect/validator');
|
22 | const logger = require('./logger');
|
23 | const mailer = require('./mailer');
|
24 | const plugins = require('./plugins');
|
25 |
|
26 |
|
27 | const app = module.exports = express();
|
28 |
|
29 | const ENGINES = {
|
30 | 'dust': require('./engines/dust'),
|
31 | 'igo-dust': require('./engines/igo-dust')
|
32 | };
|
33 |
|
34 | const SERVICES = [ config, logger, cache, db, mailer, cls, plugins ]
|
35 |
|
36 |
|
37 |
|
38 | module.exports.configure = function() {
|
39 |
|
40 | SERVICES.forEach(service => service.init());
|
41 |
|
42 | i18next
|
43 | .use(i18nMiddleware.LanguageDetector)
|
44 | .use(i18nFsBackend)
|
45 | .init(config.i18n);
|
46 |
|
47 | app.enable('trust proxy');
|
48 |
|
49 |
|
50 | const engine = ENGINES[config.engine] || ENGINES['igo-dust'];
|
51 | engine.init(app);
|
52 | app.engine = engine;
|
53 |
|
54 | app.use(compression());
|
55 | app.use(express.static('public'));
|
56 |
|
57 | if (config.env !== 'test') {
|
58 | app.use(errorHandler.init(app));
|
59 | app.use(cookieParser(config.signedCookiesSecret));
|
60 | app.use(cookieSession(config.cookieSessionConfig));
|
61 | app.use(bodyParser.json({ limit: config.bodyParser.limit }));
|
62 | app.use(bodyParser.urlencoded({ limit: config.bodyParser.limit, extended: true }));
|
63 | app.use(multipart);
|
64 | }
|
65 |
|
66 | app.use(flash);
|
67 | app.use(validator);
|
68 | app.use(i18nMiddleware.handle(i18next));
|
69 | app.use(locals);
|
70 | app.use(engine.middleware);
|
71 |
|
72 |
|
73 | const routes = require('./routes');
|
74 | routes.init(app);
|
75 |
|
76 | if (config.env !== 'test') {
|
77 | app.use(errorHandler.error);
|
78 | }
|
79 |
|
80 | }
|
81 |
|
82 |
|
83 |
|
84 | module.exports.run = function(configured, started) {
|
85 |
|
86 | module.exports.configure();
|
87 | configured && configured();
|
88 |
|
89 | app.server = app.listen(config.httpport, function() {
|
90 | logger.info('Listening to port %s', config.httpport);
|
91 | started && started();
|
92 | });
|
93 | };
|