@yhiot/utils
Version:
72 lines (67 loc) • 2.07 kB
JavaScript
import _debug from 'debug';
const debug = _debug('app:rdebug');
import parseUserAgent from '../userAgent';
// const FULL_FIELDS = 'body|query|ip|cookie|referer|agent|authorization';
const NORMAL_FIELDS = 'body|query|cookie|agent';
function getDebugInfo(ctx, fieldStr) {
let dbginfo = {};
if (fieldStr) {
let fields = fieldStr.split('|');
for (let i = 0; i < fields.length; i++) {
let 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] = parseUserAgent(ctx.request.header['user-agent']);
break;
default:
break;
}
}
}
return dbginfo;
}
let request_index = 0;
export default async function rdebug(ctx, next) {
let query = ctx.request.query;
let dateStart = new Date();
request_index++;
let fields = query.fields || NORMAL_FIELDS;
let dbginfo = getDebugInfo(ctx, fields);
debug(
`[${ctx.method} ${
ctx.path
} ${request_index} ${dateStart.getTime()}] ${JSON.stringify(dbginfo)}`,
);
let isDebug = ctx.path.indexOf('/debug') >= 0;
if (!isDebug) {
// 不包含/debug的路径,需要打印接口花费时间.
await next();
let dateEnd = new Date();
let elapsed = (dateEnd.getTime() - dateStart.getTime()) / 1000;
debug(`[+${ctx.method} ${ctx.path} ${request_index}] time=${elapsed}`);
} else {
// 包含/debug,直接返回正确,不再传递.
ctx.body = { errcode: 0 };
}
}