UNPKG

2.91 kBJavaScriptView Raw
1
2
3const _ = require('lodash');
4const bodyParser = require('body-parser');
5const compression = require('compression');
6const cookieParser = require('cookie-parser');
7const cookieSession = require('cookie-session');
8const express = require('express');
9const expressValidator = require('express-validator');
10const i18nFsBackend = require('i18next-node-fs-backend');
11const i18nMiddleware = require('i18next-express-middleware');
12const i18next = require('i18next');
13
14const cache = require('./cache');
15const cls = require('./cls');
16const config = require('./config');
17const db = require('./db/db');
18const errorHandler = require('./connect/errorhandler');
19const flash = require('./connect/flash');
20const locals = require('./connect/locals');
21const multipart = require('./connect/multipart');
22const validator = require('./connect/validator');
23const logger = require('./logger');
24const mailer = require('./mailer');
25const plugins = require('./plugins');
26
27//
28const app = module.exports = express();
29
30const ENGINES = {
31 'dust': require('./engines/dust'),
32 'igo-dust': require('./engines/igo-dust')
33};
34
35const SERVICES = [ config, logger, cache, db, mailer, cls, plugins ]
36
37
38//
39module.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 // template engine
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 // load routes
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// configured: callback function invoked when app is configured
88// started: callback function invoked when server is started
89module.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};