-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
112 lines (99 loc) · 2.71 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/**
* Application module.
* @module app
*/
/**
* Define global variables on namespace PER
* for avoid colitions with others global variables.
*/
global.PER = {};
PER.const = require('./util/const');
/**
* Avoid load .env file on production enviroment.
*/
if (process.env.NODE_ENV !== PER.const.ENV.PRODUCTION) {
require('dotenv').config();
require('dotenv-safe').load();
}
/**
* Add more modules that dependent of config.
*/
PER.helper = require('./util/helper');
PER.config = require('./config');
PER.emailjs = require('./util/emailjs');
PER.model = require('./db/model');
PER.validate = require('./util/validate');
PER.log = require('./util/winston');
/**
* Require modules.
*/
const express = require('express');
const logger = require('morgan');
const i18nModule = require("i18n-express");
const geolang = require("geolang-express");
const favicon = require('serve-favicon');
const bodyParser = require('body-parser');
const session = require('cookie-session');
const cookieParser = require('cookie-parser');
const methodOverride = require('method-override');
const flash = require('req-flash');
const index = require('./route/index');
const user = require('./route/user');
/**
* Create an express application.
*/
const app = express();
/**
* Set view config.
*/
app.set('views', PER.config.app.views);
app.set('view engine', PER.config.app.engine);
/**
* Add main middlewares.
*/
app.use(logger(PER.config.morgan));
app.use(favicon(PER.config.app.favicon));
app.use(express.static(PER.config.app.public));
app.use(cookieParser());
app.use(methodOverride());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded(PER.config.urlencoded));
app.use(session(PER.config.session));
/**
* Add middlewares for flash messages.
*/
app.use(flash(PER.config.flash));
/**
* Add middlewares for i18n.
*/
app.use(geolang(PER.config.geolang));
app.use(i18nModule(PER.config.i18n));
/**
* Add middlewares for handle route.
*/
app.use('/', index);
app.use('/user', user);
/**
* Add middleware to handle the error of page not found.
* @function handleErrPageNotFound
* @param {Object} req - Express request object
* @param {Object} res - Express response object
*/
app.use((req, res) => {
const err = new Error();
err.status = PER.const.ERR_NOT_FOUND;
res.render('general/error', {error: err});
});
/**
* Add middleware to handle error on ejecution.
* @function handleErrOnEjecution
* @param {Object} err - Express error object
* @param {Object} req - Express request object
* @param {Object} res - Express response object
*/
app.use((err, req, res) => {
PER.log.error(err.stack);
res.status(err.status || PER.const.ERR_INTERNAL_SERVER);
res.render('general/error', {error: err});
});
module.exports = app;