| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | var _ = require('lodash')var logger = require('./logger').getInstance()module.exports = {  init: init,  getHandlers: getProxyEventHandlers}function init(proxy, opts) {  var handlers = getProxyEventHandlers(opts)  _.forIn(handlers, function(handler, eventName) {    proxy.on(eventName, handlers[eventName])  })  logger.debug('[HPM] Subscribed to http-proxy events: ', _.keys(handlers))}function getProxyEventHandlers(opts) {  // https://github.com/nodejitsu/node-http-proxy#listening-for-proxy-events  var proxyEvents = [    'error',    'proxyReq',    'proxyReqWs',    'proxyRes',    'open',    'close'  ]  var handlers = {}  _.forEach(proxyEvents, function(event) {    // all handlers for the http-proxy events are prefixed with 'on'.    // loop through options and try to find these handlers    // and add them to the handlers object for subscription in init().    var eventName = _.camelCase('on ' + event)    var fnHandler = _.get(opts, eventName)    if (_.isFunction(fnHandler)) {      handlers[event] = fnHandler    }  })  // add default error handler in absence of error handler  if (!_.isFunction(handlers.error)) {    handlers.error = defaultErrorHandler  }  // add default close handler in absence of close handler  if (!_.isFunction(handlers.close)) {    handlers.close = logClose  }  return handlers}function defaultErrorHandler(err, req, res) {  var host = req.headers && req.headers.host  var code = err.code  if (res.writeHead && !res.headersSent) {    if (/HPE_INVALID/.test(code)) {      res.writeHead(502)    } else {      switch (code) {        case 'ECONNRESET':        case 'ENOTFOUND':        case 'ECONNREFUSED':          res.writeHead(504)          break        default:          res.writeHead(500)      }    }  }  res.end('Error occured while trying to proxy to: ' + host + req.url)}function logClose(req, socket, head) {  // view disconnected websocket connections  logger.info('[HPM] Client disconnected')}
 |