UNPKG

2.76 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 i18nFsBackend = require('i18next-node-fs-backend');
10const i18nMiddleware = require('i18next-express-middleware');
11const i18next = require('i18next');
12
13const cache = require('./cache');
14const cls = require('./cls');
15const config = require('./config');
16const db = require('./db/db');
17const errorHandler = require('./connect/errorhandler');
18const flash = require('./connect/flash');
19const locals = require('./connect/locals');
20const multipart = require('./connect/multipart');
21const validator = require('./connect/validator');
22const logger = require('./logger');
23const mailer = require('./mailer');
24const plugins = require('./plugins');
25
26//
27const app = module.exports = express();
28
29const ENGINES = {
30 'dust': require('./engines/dust'),
31 'igo-dust': require('./engines/igo-dust')
32};
33
34const SERVICES = [ config, logger, cache, db, mailer, cls, plugins ]
35
36
37//
38module.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 // template engine
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 // load routes
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// configured: callback function invoked when app is configured
83// started: callback function invoked when server is started
84module.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};