1 | const compression = require('compression');
|
2 | const bodyParser = require('body-parser');
|
3 | const methodOverride = require('method-override');
|
4 | const cookieParser = require('cookie-parser');
|
5 | const errorHandler = require('errorhandler');
|
6 | const cors = require('cors');
|
7 | const expressLogger = require('express-bunyan-logger');
|
8 | const HttpStatus = require('http-status');
|
9 | const PrettyStream = require('bunyan-prettystream');
|
10 | const config = require('./index');
|
11 |
|
12 | const prettyStdOut = new PrettyStream({mode: 'dev'});
|
13 | prettyStdOut.pipe(process.stdout);
|
14 |
|
15 | const MAX_ACCEPTABLE_RESPONSE_TIME = 30000;
|
16 |
|
17 | module.exports = function (app) {
|
18 | const env = app.get('env');
|
19 |
|
20 | app.use(compression());
|
21 | app.use((req, res, next) => {
|
22 |
|
23 | const contentType = req.get('content-type');
|
24 | if (!contentType || contentType === 'application/x-www-form-urlencoded') {
|
25 | req.headers['content-type'] = 'application/json';
|
26 | }
|
27 | next();
|
28 | });
|
29 | app.use(bodyParser.text());
|
30 | app.use(bodyParser.json());
|
31 | app.use(methodOverride());
|
32 | app.use(cookieParser());
|
33 | app.use(cors());
|
34 | app.use(expressLogger({
|
35 | name: `${config.FRAMEWORK_NAME}-express`,
|
36 | format: ':status-code - :method :url - response-time: :response-time',
|
37 | streams: [
|
38 | {
|
39 | level: 'info',
|
40 | stream: prettyStdOut
|
41 | }
|
42 | ],
|
43 | excludes: ['*'],
|
44 | levelFn: (status, err, meta) => {
|
45 | if (meta['response-time'] > MAX_ACCEPTABLE_RESPONSE_TIME) {
|
46 | return 'fatal';
|
47 | } else if (meta['status-code'] >= HttpStatus.INTERNAL_SERVER_ERROR) {
|
48 | return 'error';
|
49 | } else if (meta['status-code'] >= HttpStatus.BAD_REQUEST) {
|
50 | return 'warn';
|
51 | } else {
|
52 | return 'info';
|
53 | }
|
54 | }
|
55 | }));
|
56 |
|
57 | if ('development' === env || 'test' === env) {
|
58 | app.use(errorHandler());
|
59 | }
|
60 | }; |
\ | No newline at end of file |