UNPKG

5.31 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _express = require('express');
8
9var _express2 = _interopRequireDefault(_express);
10
11var _morgan = require('morgan');
12
13var _morgan2 = _interopRequireDefault(_morgan);
14
15var _bodyParser = require('body-parser');
16
17var _bodyParser2 = _interopRequireDefault(_bodyParser);
18
19var _cookieParser = require('cookie-parser');
20
21var _cookieParser2 = _interopRequireDefault(_cookieParser);
22
23var _compression = require('compression');
24
25var _compression2 = _interopRequireDefault(_compression);
26
27var _methodOverride = require('method-override');
28
29var _methodOverride2 = _interopRequireDefault(_methodOverride);
30
31var _cors = require('cors');
32
33var _cors2 = _interopRequireDefault(_cors);
34
35var _httpStatus = require('http-status');
36
37var _httpStatus2 = _interopRequireDefault(_httpStatus);
38
39var _expressWinston = require('express-winston');
40
41var _expressWinston2 = _interopRequireDefault(_expressWinston);
42
43var _expressValidation = require('express-validation');
44
45var _expressValidation2 = _interopRequireDefault(_expressValidation);
46
47var _winston = require('./winston');
48
49var _winston2 = _interopRequireDefault(_winston);
50
51var _index = require('../API/index');
52
53var _index2 = _interopRequireDefault(_index);
54
55var _index3 = require('../pages/index');
56
57var _index4 = _interopRequireDefault(_index3);
58
59var _env = require('./env');
60
61var _env2 = _interopRequireDefault(_env);
62
63var _APIError = require('../API/helpers/APIError');
64
65var _APIError2 = _interopRequireDefault(_APIError);
66
67var _ExtendableError = require('../API/helpers/ExtendableError');
68
69var _ExtendableError2 = _interopRequireDefault(_ExtendableError);
70
71var _passport = require('passport');
72
73var _passport2 = _interopRequireDefault(_passport);
74
75function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
76
77var app = (0, _express2.default)();
78
79if (_env2.default.env === 'development') {
80 app.use((0, _morgan2.default)('dev'));
81}
82
83// parse body params and attache them to req.body
84app.use(_bodyParser2.default.json());
85app.use(_bodyParser2.default.urlencoded({ extended: true }));
86
87app.use((0, _cookieParser2.default)());
88app.use((0, _compression2.default)());
89app.use((0, _methodOverride2.default)());
90
91app.use(_passport2.default.initialize());
92app.use(_passport2.default.session());
93
94// disable 'X-Powered-By' header in response
95app.disable('x-powered-by');
96
97// enable CORS - Cross Origin Resource Sharing
98app.use((0, _cors2.default)());
99
100// enable detailed API logging in dev env
101if (_env2.default.env === 'development') {
102 _expressWinston2.default.requestWhitelist.push('body');
103 _expressWinston2.default.responseWhitelist.push('body');
104 app.use(_expressWinston2.default.logger({
105 winstonInstance: _winston2.default,
106 meta: true, // optional: log meta data about request (defaults to true)
107 msg: 'HTTP {{req.method}} {{req.url}} {{res.statusCode}} {{res.responseTime}}ms',
108 colorStatus: true // Color the status code (default green, 3XX cyan, 4XX yellow, 5XX red).
109 }));
110}
111
112if (_env2.default.staticPath) {
113 /* eslint-disable no-console */
114 console.log('Serve static files from: \x1b[36m' + _env2.default.staticPath + '\x1b[0m');
115 /* eslint-enable no-console */
116 app.use(_express2.default.static(_env2.default.staticPath));
117}
118
119// mount page routes on / path
120app.use('/', _index4.default);
121// mount API routes on /api path
122app.use('/api', _index2.default);
123
124// fallback for work with HTML5 History API
125// should be defined after back-end routes (like /api)
126if (_env2.default.staticPath) {
127 app.get('/*', function (req, res) {
128 res.sendFile(_env2.default.staticPath + '/index.html');
129 });
130}
131
132// if error is not an instanceOf APIError, convert it.
133app.use(function (err, req, res, next) {
134 if (err instanceof _expressValidation2.default.ValidationError) {
135 // validation error contains errors which is an array of error each containing message[]
136 var unifiedErrorMessage = err.errors.map(function (error) {
137 return error.messages.join('. ');
138 }).join(' and ');
139 var error = new _APIError2.default(unifiedErrorMessage, err.status, true);
140 return next(error);
141 } else if (!(err instanceof _ExtendableError2.default)) {
142 var apiError = new _APIError2.default(err.message, err.status, err.isPublic);
143 return next(apiError);
144 }
145 return next(err);
146});
147
148// catch 404 and forward to error handler
149app.use(function (req, res, next) {
150 var err = new _APIError2.default('API not found', _httpStatus2.default.NOT_FOUND);
151 return next(err);
152});
153
154// log error in winston transports except when executing test suite
155if (_env2.default.env !== 'test') {
156 app.use(_expressWinston2.default.errorLogger({
157 winstonInstance: _winston2.default
158 }));
159}
160
161// error handler, send stacktrace only during development
162app.use(function (err, req, res, next) {
163 return (// eslint-disable-line no-unused-vars
164 res.status(err.status).json({
165 message: err.isPublic ? err.message : _httpStatus2.default[err.status],
166 stack: _env2.default.env === 'development' ? err.stack : {}
167 })
168 );
169});
170
171exports.default = app;
172module.exports = exports['default'];
173//# sourceMappingURL=express.js.map