egg-jianghu
Version:
egg-jianghu
80 lines (67 loc) • 3.14 kB
JavaScript
;
const _ = require('lodash');
const { tableEnum } = require('../../constant/constant');
const geoip = require('geoip-lite');
const dayjs = require('dayjs');
module.exports = {
async recordResourceRequestLog(ctx) {
const { app, body: responseBody, request, packageResource, userInfo } = ctx;
const { ignoreListOfResourceRequestLog=[] }= app.config.jiangHuConfig;
const { resourceRequestLogRecordUserId }= app.config.jiangHuConfig.compatibleConfig;
const { resourceId } = packageResource;
if (ignoreListOfResourceRequestLog.indexOf(resourceId) > -1) {
return;
}
const requestBody = Object.assign({}, request.body);
const { userId, deviceId } = userInfo.user || {};
const userIp = ctx.header['x-real-ip'] || ctx.request.ip || '';
const { jianghuKnex } = app;
const { packageId } = requestBody;
const { status: responseStatus } = responseBody;
const responseBodyString = JSON.stringify(responseBody);
const userAgent = requestBody.appData.userAgent || '';
const geo = geoip.lookup(userIp);
let userIpRegion = '';
if (geo) { userIpRegion = `${geo.country}|${geo.region}|${geo.timezone}|${geo.city}|${geo.ll}|${geo.range}`; }
const requestBodyString = JSON.stringify(requestBody);
const insertData = {
packageId, resourceId, deviceId,
userIp, userAgent, userIpRegion,
requestBody: requestBodyString,
responseBody: responseBodyString,
responseStatus,
};
// 适配代码: 3.0 版本删除
if (resourceRequestLogRecordUserId === true) {
insertData.userId = userId;
}
// TEXT: 65,535 bytes => ~64kb, utf8mb4 中一个字符占 4个byte
if (insertData.responseBody && insertData.responseBody.length > 16383) {
insertData.responseBody = insertData.responseBody.substring(0, 16383);
}
if (insertData.requestBody && insertData.requestBody.length > 16383) {
insertData.requestBody = insertData.requestBody.substring(0, 16383);
}
await jianghuKnex(tableEnum._resource_request_log)
.insert(insertData);
},
async updateRequestDemoAndResponseDemo(ctx) {
const { body: responseBody, app, request } = ctx
const { jianghuKnex } = app;
const requestBody = Object.assign({}, request.body);
const { pageId, actionId } = requestBody.appData;
// 如果 request.appData.param 数据比较大 ==> 剔除params
const requestBodyTmp = JSON.parse(JSON.stringify(requestBody));
if (requestBodyTmp.appData.actionData && JSON.stringify(requestBodyTmp.appData.actionData).length > 2048) {
delete requestBodyTmp.appData.actionData;
}
const requestDemo = JSON.stringify(requestBodyTmp);
// 如果 response data数据比较大 ==> 剔除data
const responseBodyTmp = JSON.parse(JSON.stringify(responseBody));
if (responseBodyTmp.appData && JSON.stringify(responseBodyTmp.appData).length > 2048) {
delete responseBodyTmp.appData;
}
const responseDemo = JSON.stringify(responseBodyTmp);
await jianghuKnex(tableEnum._resource).where({ pageId, actionId }).update({ requestDemo, responseDemo });
},
};