UNPKG

@yhiot/utils

Version:
72 lines (67 loc) 2.07 kB
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 }; } }