UNPKG

1.88 kBJavaScriptView Raw
1const compression = require('compression');
2const bodyParser = require('body-parser');
3const methodOverride = require('method-override');
4const cookieParser = require('cookie-parser');
5const errorHandler = require('errorhandler');
6const cors = require('cors');
7const expressLogger = require('express-bunyan-logger');
8const HttpStatus = require('http-status');
9const PrettyStream = require('bunyan-prettystream');
10const config = require('./index');
11
12const prettyStdOut = new PrettyStream({mode: 'dev'});
13prettyStdOut.pipe(process.stdout);
14
15const MAX_ACCEPTABLE_RESPONSE_TIME = 30000;
16
17module.exports = function (app) {
18 const env = app.get('env');
19
20 app.use(compression());
21 app.use((req, res, next) => {
22 // fall back to json post bodies
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 'debug';
53 }
54 }
55 }));
56
57 if ('development' === env || 'test' === env) {
58 app.use(errorHandler()); // Error handler - has to be last
59 }
60};
\No newline at end of file