orionsoft-react-scripts
Version:
Orionsoft Configuration and scripts for Create React App.
63 lines (48 loc) • 1.83 kB
JavaScript
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');
}