catproxy
Version:
a node proxy or host change tools
110 lines (96 loc) • 3.15 kB
JavaScript
;
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);
};