UNPKG

@yhiot/utils

Version:
123 lines (95 loc) 3.37 kB
"use strict"; 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); }