lin-cms-test
Version:
The core library of Lin CMS, this package is just for test!
64 lines (63 loc) • 2.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const util_1 = require("./util");
const lodash_1 = require("lodash");
const core_1 = require("./core");
const REG_XP = /(?<=\{)[^}]*(?=\})/g;
exports.logger = (template) => {
return async (ctx, next) => {
await next();
// 取数据,写入到日志中
writeLog(template, ctx);
};
};
function writeLog(template, ctx) {
const message = parseTemplate(template, ctx.currentUser, ctx.response, ctx.request);
if (ctx.matched) {
const info = util_1.findAuthAndModule(ctx);
let auth = "";
if (info) {
auth = lodash_1.get(info, "auth");
}
const statusCode = ctx.status || 0;
// @ts-ignore
core_1.Log.createLog({
message: message,
userId: ctx.currentUser.id,
userName: ctx.currentUser.nickname,
statusCode: statusCode,
method: ctx.request.method,
path: ctx.request.path,
authority: auth
}, true);
}
}
function parseTemplate(template, user, reponse, request) {
const res = REG_XP.exec(template);
if (res) {
res.forEach(item => {
const index = item.lastIndexOf(".");
util_1.assert(index !== -1, item + "中必须包含 . ,且为一个");
const obj = item.substring(0, index);
const prop = item.substring(index + 1, item.length);
let it;
switch (obj) {
case "user":
it = lodash_1.get(user, prop, "");
break;
case "response":
it = lodash_1.get(reponse, prop, "");
break;
case "request":
it = lodash_1.get(request, prop, "");
break;
default:
it = "";
break;
}
template = template.replace(`{${item}}`, it);
});
}
return template;
}
exports.parseTemplate = parseTemplate;