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