@yhiot/utils
Version:
123 lines (95 loc) • 3.37 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = rdebug;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _debug2 = _interopRequireDefault(require("debug"));
var _userAgent = _interopRequireDefault(require("../userAgent"));
var debug = (0, _debug2.default)('app:rdebug');
// const FULL_FIELDS = 'body|query|ip|cookie|referer|agent|authorization';
var NORMAL_FIELDS = 'body|query|cookie|agent';
function getDebugInfo(ctx, fieldStr) {
var dbginfo = {};
if (fieldStr) {
var fields = fieldStr.split('|');
for (var i = 0; i < fields.length; i++) {
var field = fields[i];
switch (field) {
case 'query':
dbginfo[field] = ctx.request.query;
break;
case 'body':
dbginfo[field] = ctx.request.body;
break;
case 'ip':
dbginfo[field] = ctx.request.header['X-Real-IP'] || ctx.request.ip;
break;
case 'cookie':
dbginfo[field] = ctx.headers.cookie;
break;
case 'authorization':
dbginfo[field] = ctx.headers.authorization;
break;
case 'referer':
dbginfo[field] = ctx.headers.referer;
break;
case 'header':
dbginfo[field] = ctx.headers;
break;
case 'agent':
dbginfo[field] = (0, _userAgent.default)(ctx.request.header['user-agent']);
break;
default:
break;
}
}
}
return dbginfo;
}
var request_index = 0;
function rdebug(_x, _x2) {
return _rdebug.apply(this, arguments);
}
function _rdebug() {
_rdebug = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ctx, next) {
var query, dateStart, fields, dbginfo, isDebug, dateEnd, elapsed;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
query = ctx.request.query;
dateStart = new Date();
request_index++;
fields = query.fields || NORMAL_FIELDS;
dbginfo = getDebugInfo(ctx, fields);
debug("[".concat(ctx.method, " ").concat(ctx.path, " ").concat(request_index, " ").concat(dateStart.getTime(), "] ").concat(JSON.stringify(dbginfo)));
isDebug = ctx.path.indexOf('/debug') >= 0;
if (isDebug) {
_context.next = 15;
break;
}
_context.next = 10;
return next();
case 10:
dateEnd = new Date();
elapsed = (dateEnd.getTime() - dateStart.getTime()) / 1000;
debug("[+".concat(ctx.method, " ").concat(ctx.path, " ").concat(request_index, "] time=").concat(elapsed));
_context.next = 16;
break;
case 15:
// 包含/debug,直接返回正确,不再传递.
ctx.body = {
errcode: 0
};
case 16:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _rdebug.apply(this, arguments);
}