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