all files / swagger-node-runner/fittings/ json_error_handler.js

100% Statements 25/25
89.47% Branches 17/19
100% Functions 2/2
100% Lines 23/23
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        15×   15×   36×   33×   33×   33× 33× 33× 12× 21× 18× 18×         33×   31× 31×   31× 31×          
'use strict';
 
var debug = require('debug')('swagger:json_error_handler');
var util = require('util');
 
module.exports = function create(fittingDef, bagpipes) {
 
  debug('config: %j', fittingDef);
 
  return function error_handler(context, next) {
 
    if (!util.isError(context.error)) { return next(); }
 
    var err = context.error;
 
    debug('exec: %s', context.error.message);
 
    try {
      Eif (!context.statusCode || context.statusCode < 400) {
        if (context.response && context.response.statusCode && context.response.statusCode >= 400) {
          context.statusCode = context.response.statusCode;
        } else if (err.statusCode && err.statusCode >= 400) {
          context.statusCode = err.statusCode;
          delete(err.statusCode);
        } else {
          context.statusCode = 500;
        }
      }
 
      if (context.statusCode === 500 && !fittingDef.handle500Errors) { return next(err); }
 
      context.headers['Content-Type'] = 'application/json';
      Object.defineProperty(err, 'message', { enumerable: true }); // include message property in response
 
      delete(context.error);
      next(null, JSON.stringify(err));
    } catch (err2) {
      debug('jsonErrorHandler unable to stringify error: %j', err);
      next();
    }
  }
};