UNPKG

@booxood/mocker-api

Version:

This is dev support mock RESTful API.

58 lines (44 loc) 6.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.proxyHandle = proxyHandle; var _url = _interopRequireDefault(require("url")); var _httpProxy = _interopRequireDefault(require("http-proxy")); var _safe = _interopRequireDefault(require("colors-cli/safe")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function proxyHandle(req, res, options = {}, proxyKey) { const currentProxy = options.proxy[proxyKey]; const url = _url.default.parse(currentProxy); if (options.changeHost) { req.headers.host = url.host; } const { options: proxyOptions = {}, listeners: proxyListeners = {} } = options.httpProxy; /** * rewrite target's url path. Object-keys will be used as RegExp to match paths. * https://github.com/jaywcjlove/mocker-api/issues/62 */ Object.keys(options.pathRewrite).forEach(rgxStr => { const rePath = req.path.replace(new RegExp(rgxStr), options.pathRewrite[rgxStr]); const currentPath = [rePath]; if (req.url.indexOf('?') > 0) { currentPath.push(req.url.replace(/(.*)\?/, '')); } req.query = _url.default.parse(req.url, true).query; req.url = req.originalUrl = currentPath.join('?'); }); const proxyHTTP = _httpProxy.default.createProxyServer({}); proxyHTTP.on('error', err => { console.error(`${_safe.default.red_b.black(` Proxy Failed: ${err.name}`)} ${err.message || ''} ${err.stack || ''} !!`); }); Object.keys(proxyListeners).forEach(event => { proxyHTTP.on(event, proxyListeners[event]); }); proxyHTTP.web(req, res, Object.assign({ target: url.href }, proxyOptions)); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm94eUhhbmRsZS50cyJdLCJuYW1lcyI6WyJwcm94eUhhbmRsZSIsInJlcSIsInJlcyIsIm9wdGlvbnMiLCJwcm94eUtleSIsImN1cnJlbnRQcm94eSIsInByb3h5IiwidXJsIiwiVVJMIiwicGFyc2UiLCJjaGFuZ2VIb3N0IiwiaGVhZGVycyIsImhvc3QiLCJwcm94eU9wdGlvbnMiLCJsaXN0ZW5lcnMiLCJwcm94eUxpc3RlbmVycyIsImh0dHBQcm94eSIsIk9iamVjdCIsImtleXMiLCJwYXRoUmV3cml0ZSIsImZvckVhY2giLCJyZ3hTdHIiLCJyZVBhdGgiLCJwYXRoIiwicmVwbGFjZSIsIlJlZ0V4cCIsImN1cnJlbnRQYXRoIiwiaW5kZXhPZiIsInB1c2giLCJxdWVyeSIsIm9yaWdpbmFsVXJsIiwiam9pbiIsInByb3h5SFRUUCIsImNyZWF0ZVByb3h5U2VydmVyIiwib24iLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJjb2xvciIsInJlZF9iIiwiYmxhY2siLCJuYW1lIiwibWVzc2FnZSIsInN0YWNrIiwiZXZlbnQiLCJ3ZWIiLCJhc3NpZ24iLCJ0YXJnZXQiLCJocmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7Ozs7QUFHTyxTQUFTQSxXQUFULENBQXFCQyxHQUFyQixFQUFtQ0MsR0FBbkMsRUFBa0RDLE9BQXFCLEdBQUcsRUFBMUUsRUFBOEVDLFFBQTlFLEVBQWdHO0FBQ3JHLFFBQU1DLFlBQVksR0FBR0YsT0FBTyxDQUFDRyxLQUFSLENBQWNGLFFBQWQsQ0FBckI7O0FBQ0EsUUFBTUcsR0FBRyxHQUFHQyxhQUFJQyxLQUFKLENBQVVKLFlBQVYsQ0FBWjs7QUFDQSxNQUFJRixPQUFPLENBQUNPLFVBQVosRUFBd0I7QUFDdEJULElBQUFBLEdBQUcsQ0FBQ1UsT0FBSixDQUFZQyxJQUFaLEdBQW1CTCxHQUFHLENBQUNLLElBQXZCO0FBQ0Q7O0FBQ0QsUUFBTTtBQUFFVCxJQUFBQSxPQUFPLEVBQUVVLFlBQVksR0FBRyxFQUExQjtBQUE4QkMsSUFBQUEsU0FBUyxFQUFFQyxjQUFjLEdBQUc7QUFBMUQsTUFBa0haLE9BQU8sQ0FBQ2EsU0FBaEk7QUFDQTtBQUNGO0FBQ0E7QUFDQTs7QUFDRUMsRUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVlmLE9BQU8sQ0FBQ2dCLFdBQXBCLEVBQWlDQyxPQUFqQyxDQUF5Q0MsTUFBTSxJQUFJO0FBQ2pELFVBQU1DLE1BQU0sR0FBR3JCLEdBQUcsQ0FBQ3NCLElBQUosQ0FBU0MsT0FBVCxDQUFpQixJQUFJQyxNQUFKLENBQVdKLE1BQVgsQ0FBakIsRUFBcUNsQixPQUFPLENBQUNnQixXQUFSLENBQW9CRSxNQUFwQixDQUFyQyxDQUFmO0FBQ0EsVUFBTUssV0FBVyxHQUFHLENBQUNKLE1BQUQsQ0FBcEI7O0FBQ0EsUUFBSXJCLEdBQUcsQ0FBQ00sR0FBSixDQUFRb0IsT0FBUixDQUFnQixHQUFoQixJQUF1QixDQUEzQixFQUE4QjtBQUM1QkQsTUFBQUEsV0FBVyxDQUFDRSxJQUFaLENBQWlCM0IsR0FBRyxDQUFDTSxHQUFKLENBQVFpQixPQUFSLENBQWdCLFFBQWhCLEVBQTBCLEVBQTFCLENBQWpCO0FBQ0Q7O0FBQ0R2QixJQUFBQSxHQUFHLENBQUM0QixLQUFKLEdBQVlyQixhQUFJQyxLQUFKLENBQVVSLEdBQUcsQ0FBQ00sR0FBZCxFQUFtQixJQUFuQixFQUF5QnNCLEtBQXJDO0FBQ0E1QixJQUFBQSxHQUFHLENBQUNNLEdBQUosR0FBVU4sR0FBRyxDQUFDNkIsV0FBSixHQUFrQkosV0FBVyxDQUFDSyxJQUFaLENBQWlCLEdBQWpCLENBQTVCO0FBQ0QsR0FSRDs7QUFVQSxRQUFNQyxTQUFTLEdBQUdoQixtQkFBVWlCLGlCQUFWLENBQTRCLEVBQTVCLENBQWxCOztBQUNBRCxFQUFBQSxTQUFTLENBQUNFLEVBQVYsQ0FBYSxPQUFiLEVBQXVCQyxHQUFELElBQVM7QUFDN0JDLElBQUFBLE9BQU8sQ0FBQ0MsS0FBUixDQUFlLEdBQUVDLGNBQU1DLEtBQU4sQ0FBWUMsS0FBWixDQUFtQixrQkFBaUJMLEdBQUcsQ0FBQ00sSUFBSyxFQUE3QyxDQUFnRCxJQUFHTixHQUFHLENBQUNPLE9BQUosSUFBZSxFQUFHLElBQUdQLEdBQUcsQ0FBQ1EsS0FBSixJQUFhLEVBQUcsS0FBekc7QUFDRCxHQUZEO0FBR0ExQixFQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWUgsY0FBWixFQUE0QkssT0FBNUIsQ0FBb0N3QixLQUFLLElBQUk7QUFDM0NaLElBQUFBLFNBQVMsQ0FBQ0UsRUFBVixDQUFhVSxLQUFiLEVBQW9CN0IsY0FBYyxDQUFDNkIsS0FBRCxDQUFsQztBQUNELEdBRkQ7QUFJQVosRUFBQUEsU0FBUyxDQUFDYSxHQUFWLENBQWM1QyxHQUFkLEVBQW1CQyxHQUFuQixFQUF3QmUsTUFBTSxDQUFDNkIsTUFBUCxDQUFjO0FBQUVDLElBQUFBLE1BQU0sRUFBRXhDLEdBQUcsQ0FBQ3lDO0FBQWQsR0FBZCxFQUFvQ25DLFlBQXBDLENBQXhCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVVJMIGZyb20gJ3VybCc7XG5pbXBvcnQgaHR0cFByb3h5IGZyb20gJ2h0dHAtcHJveHknO1xuaW1wb3J0IHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBjb2xvciBmcm9tICdjb2xvcnMtY2xpL3NhZmUnO1xuaW1wb3J0IHsgTW9ja2VyT3B0aW9uLCBIdHRwUHJveHlMaXN0ZW5lcnMgfSBmcm9tICcuJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3h5SGFuZGxlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgb3B0aW9uczogTW9ja2VyT3B0aW9uID0ge30sIHByb3h5S2V5OiBzdHJpbmcpIHtcbiAgY29uc3QgY3VycmVudFByb3h5ID0gb3B0aW9ucy5wcm94eVtwcm94eUtleV07XG4gIGNvbnN0IHVybCA9IFVSTC5wYXJzZShjdXJyZW50UHJveHkpO1xuICBpZiAob3B0aW9ucy5jaGFuZ2VIb3N0KSB7XG4gICAgcmVxLmhlYWRlcnMuaG9zdCA9IHVybC5ob3N0O1xuICB9XG4gIGNvbnN0IHsgb3B0aW9uczogcHJveHlPcHRpb25zID0ge30sIGxpc3RlbmVyczogcHJveHlMaXN0ZW5lcnMgPSB7fSBhcyBIdHRwUHJveHlMaXN0ZW5lcnMgfTogTW9ja2VyT3B0aW9uWydodHRwUHJveHknXSA9IG9wdGlvbnMuaHR0cFByb3h5O1xuICAvKipcbiAgICogcmV3cml0ZSB0YXJnZXQncyB1cmwgcGF0aC4gT2JqZWN0LWtleXMgd2lsbCBiZSB1c2VkIGFzIFJlZ0V4cCB0byBtYXRjaCBwYXRocy5cbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pheXdjamxvdmUvbW9ja2VyLWFwaS9pc3N1ZXMvNjJcbiAgICovXG4gIE9iamVjdC5rZXlzKG9wdGlvbnMucGF0aFJld3JpdGUpLmZvckVhY2gocmd4U3RyID0+IHtcbiAgICBjb25zdCByZVBhdGggPSByZXEucGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAocmd4U3RyKSwgb3B0aW9ucy5wYXRoUmV3cml0ZVtyZ3hTdHJdKTtcbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IFtyZVBhdGhdO1xuICAgIGlmIChyZXEudXJsLmluZGV4T2YoJz8nKSA+IDApIHtcbiAgICAgIGN1cnJlbnRQYXRoLnB1c2gocmVxLnVybC5yZXBsYWNlKC8oLiopXFw/LywgJycpKTtcbiAgICB9XG4gICAgcmVxLnF1ZXJ5ID0gVVJMLnBhcnNlKHJlcS51cmwsIHRydWUpLnF1ZXJ5O1xuICAgIHJlcS51cmwgPSByZXEub3JpZ2luYWxVcmwgPSBjdXJyZW50UGF0aC5qb2luKCc/Jyk7XG4gIH0pO1xuXG4gIGNvbnN0IHByb3h5SFRUUCA9IGh0dHBQcm94eS5jcmVhdGVQcm94eVNlcnZlcih7fSk7XG4gIHByb3h5SFRUUC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcihgJHtjb2xvci5yZWRfYi5ibGFjayhgIFByb3h5IEZhaWxlZDogJHtlcnIubmFtZX1gKX0gJHtlcnIubWVzc2FnZSB8fCAnJ30gJHtlcnIuc3RhY2sgfHwgJyd9ICEhYCk7XG4gIH0pO1xuICBPYmplY3Qua2V5cyhwcm94eUxpc3RlbmVycykuZm9yRWFjaChldmVudCA9PiB7XG4gICAgcHJveHlIVFRQLm9uKGV2ZW50LCBwcm94eUxpc3RlbmVyc1tldmVudF0pO1xuICB9KTtcblxuICBwcm94eUhUVFAud2ViKHJlcSwgcmVzLCBPYmplY3QuYXNzaWduKHsgdGFyZ2V0OiB1cmwuaHJlZiB9LCBwcm94eU9wdGlvbnMpKTtcbn0iXX0=