UNPKG

catproxy

Version:

a node proxy or host change tools

110 lines (96 loc) 3.15 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.sendErr = exports.openCmd = exports.error = exports.writeErr = exports.getUrl = undefined; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; var _log = require('./log'); var _log2 = _interopRequireDefault(_log); var _child_process = require('child_process'); var _child_process2 = _interopRequireDefault(_child_process); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var getUrl = exports.getUrl = function getUrl(_ref) { var port = _ref.port; var pathname = _ref.path; var protocol = _ref.protocol; var hostname = _ref.hostname; var host = _ref.host; if (protocol && (hostname || host)) { hostname = hostname || host; hostname = hostname.split(':')[0]; protocol === "https" ? "http" : "https"; if (+port === 80 && protocol === "http") { port = ""; } if (+port === 443 && protocol === "https") { port = ""; } if (port) { port = ":" + port; } pathname = pathname || ""; return protocol + '://' + hostname + port + pathname; } }; var writeErr = exports.writeErr = function writeErr(err) { err = err || "系统内部错误"; if (err.stack && err.message) { err = err.message + "<br>" + err.stack; } return err; }; var portReg = /EADDRINUSE\s*[^0-9]*([0-9]+)/i; var error = exports.error = function error(err) { if (err.message && err.message.indexOf("EACCES") > -1) { _log2.default.error("请用sudo管理员权限打开"); process.exit(1); } else if (err.message.indexOf("EADDRINUSE") > -1) { var port = err.message.match(portReg); port = port && port.length > 1 ? port[1] : ""; _log2.default.error('端口' + port + '被占用,请检查端口占用情况'); process.exit(1); } else { _log2.default.error("出现错误:" + err.stack); } }; var openCmd = exports.openCmd = function openCmd(uri) { var cmd; if (process.platform === 'win32') { cmd = 'start'; } else if (process.platform === 'linux') { cmd = 'xdg-open'; } else if (process.platform === 'darwin') { cmd = 'open'; } _child_process2.default.exec([cmd, uri].join(' ')); }; var sendErr = exports.sendErr = function sendErr(res, err, uri) { if (!res) { return; } err = err || ""; _log2.default.error(err); if (uri) { _log2.default.error('error url: ' + uri); } if (res.finished) { return; } var message = ""; var t = typeof err === 'undefined' ? 'undefined' : _typeof(err); if (t === 'string') { message = err; } else if (t === 'object') { message = (err.message || "") + (err.msg || "") + (err.stack || ""); } res.headers = res.headers || {}; if (!res.headers['content-type'] || !res.headers['Content-Type']) { res.headers['Content-Type'] = "text/html; charset=utf-8"; } var statusCode = '500'; if (err.message && err.message.indexOf('ETIMEDOUT') > -1) { statusCode = '504'; } res.writeHead(statusCode, res.headers); res.end(message); };