all files / http-proxy-middleware/lib/ handlers.js

100% Statements 28/28
100% Branches 12/12
100% Functions 6/6
100% Lines 28/28
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63           41×   41× 85×     41×       48× 48×   48×       288× 288×   288× 17×         48× 44×       48× 46×     48×                    
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);
 
    if (res.writeHead && !res.headersSent) {
        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');
}