252 lines
7.4 KiB
JavaScript
252 lines
7.4 KiB
JavaScript
/**
|
||
* 操作日志集成示例
|
||
* @file operation-log-integration.js
|
||
* @description 展示如何在现有控制器中集成操作日志记录
|
||
*/
|
||
|
||
const { createOperationLogger } = require('../middleware/operationLogger');
|
||
|
||
// 示例1: 用户管理控制器集成操作日志
|
||
const userControllerWithLogs = {
|
||
// 创建用户 - 集成操作日志
|
||
createUser: [
|
||
// 操作日志中间件
|
||
createOperationLogger({
|
||
moduleName: '用户管理',
|
||
tableName: 'users',
|
||
getRecordId: (req, res) => res.body?.data?.id || null,
|
||
getOperationDesc: (req, res) => `创建用户: ${req.body.username}`,
|
||
getOldData: () => null,
|
||
getNewData: (req, res) => res.body?.data || null
|
||
}),
|
||
|
||
// 原有的创建用户逻辑
|
||
async (req, res) => {
|
||
try {
|
||
// 创建用户逻辑
|
||
const user = await User.create(req.body);
|
||
res.json({
|
||
success: true,
|
||
data: user,
|
||
message: '用户创建成功'
|
||
});
|
||
} catch (error) {
|
||
res.status(500).json({
|
||
success: false,
|
||
message: '用户创建失败',
|
||
error: error.message
|
||
});
|
||
}
|
||
}
|
||
],
|
||
|
||
// 更新用户 - 集成操作日志
|
||
updateUser: [
|
||
createOperationLogger({
|
||
moduleName: '用户管理',
|
||
tableName: 'users',
|
||
getRecordId: (req, res) => req.params.id,
|
||
getOperationDesc: (req, res) => `更新用户: ${req.body.username || req.params.id}`,
|
||
getOldData: async (req, res) => {
|
||
// 获取更新前的数据
|
||
const oldUser = await User.findByPk(req.params.id);
|
||
return oldUser ? oldUser.toJSON() : null;
|
||
},
|
||
getNewData: (req, res) => res.body?.data || req.body
|
||
}),
|
||
|
||
async (req, res) => {
|
||
try {
|
||
const user = await User.findByPk(req.params.id);
|
||
if (!user) {
|
||
return res.status(404).json({
|
||
success: false,
|
||
message: '用户不存在'
|
||
});
|
||
}
|
||
|
||
await user.update(req.body);
|
||
res.json({
|
||
success: true,
|
||
data: user,
|
||
message: '用户更新成功'
|
||
});
|
||
} catch (error) {
|
||
res.status(500).json({
|
||
success: false,
|
||
message: '用户更新失败',
|
||
error: error.message
|
||
});
|
||
}
|
||
}
|
||
],
|
||
|
||
// 删除用户 - 集成操作日志
|
||
deleteUser: [
|
||
createOperationLogger({
|
||
moduleName: '用户管理',
|
||
tableName: 'users',
|
||
getRecordId: (req, res) => req.params.id,
|
||
getOperationDesc: (req, res) => `删除用户: ${req.params.id}`,
|
||
getOldData: async (req, res) => {
|
||
// 获取删除前的数据
|
||
const oldUser = await User.findByPk(req.params.id);
|
||
return oldUser ? oldUser.toJSON() : null;
|
||
},
|
||
getNewData: () => null
|
||
}),
|
||
|
||
async (req, res) => {
|
||
try {
|
||
const user = await User.findByPk(req.params.id);
|
||
if (!user) {
|
||
return res.status(404).json({
|
||
success: false,
|
||
message: '用户不存在'
|
||
});
|
||
}
|
||
|
||
await user.destroy();
|
||
res.json({
|
||
success: true,
|
||
message: '用户删除成功'
|
||
});
|
||
} catch (error) {
|
||
res.status(500).json({
|
||
success: false,
|
||
message: '用户删除失败',
|
||
error: error.message
|
||
});
|
||
}
|
||
]
|
||
};
|
||
|
||
// 示例2: 农场管理控制器集成操作日志
|
||
const farmControllerWithLogs = {
|
||
// 创建农场 - 集成操作日志
|
||
createFarm: [
|
||
createOperationLogger({
|
||
moduleName: '农场管理',
|
||
tableName: 'farms',
|
||
getRecordId: (req, res) => res.body?.data?.id || null,
|
||
getOperationDesc: (req, res) => `创建农场: ${req.body.name}`,
|
||
getOldData: () => null,
|
||
getNewData: (req, res) => res.body?.data || null
|
||
}),
|
||
|
||
async (req, res) => {
|
||
try {
|
||
const farm = await Farm.create(req.body);
|
||
res.json({
|
||
success: true,
|
||
data: farm,
|
||
message: '农场创建成功'
|
||
});
|
||
} catch (error) {
|
||
res.status(500).json({
|
||
success: false,
|
||
message: '农场创建失败',
|
||
error: error.message
|
||
});
|
||
}
|
||
}
|
||
]
|
||
};
|
||
|
||
// 示例3: 批量操作日志记录
|
||
const batchOperationLogger = createBatchOperationLogger([
|
||
{
|
||
moduleName: '用户管理',
|
||
tableName: 'users',
|
||
getRecordId: (req, res) => req.params.id,
|
||
getOperationDesc: (req, res) => `批量操作用户: ${req.params.id}`,
|
||
getOldData: () => null,
|
||
getNewData: (req, res) => res.body
|
||
},
|
||
{
|
||
moduleName: '权限管理',
|
||
tableName: 'user_roles',
|
||
getRecordId: (req, res) => req.params.id,
|
||
getOperationDesc: (req, res) => `更新用户角色: ${req.params.id}`,
|
||
getOldData: () => null,
|
||
getNewData: (req, res) => req.body.roles
|
||
}
|
||
]);
|
||
|
||
// 示例4: 在Express路由中使用
|
||
const express = require('express');
|
||
const router = express.Router();
|
||
|
||
// 用户路由
|
||
router.post('/users',
|
||
createOperationLogger({
|
||
moduleName: '用户管理',
|
||
tableName: 'users',
|
||
getRecordId: (req, res) => res.body?.data?.id || null,
|
||
getOperationDesc: (req, res) => `创建用户: ${req.body.username}`,
|
||
getOldData: () => null,
|
||
getNewData: (req, res) => res.body?.data || null
|
||
}),
|
||
userControllerWithLogs.createUser[1] // 实际的控制器函数
|
||
);
|
||
|
||
router.put('/users/:id',
|
||
createOperationLogger({
|
||
moduleName: '用户管理',
|
||
tableName: 'users',
|
||
getRecordId: (req, res) => req.params.id,
|
||
getOperationDesc: (req, res) => `更新用户: ${req.body.username || req.params.id}`,
|
||
getOldData: async (req, res) => {
|
||
const oldUser = await User.findByPk(req.params.id);
|
||
return oldUser ? oldUser.toJSON() : null;
|
||
},
|
||
getNewData: (req, res) => res.body?.data || req.body
|
||
}),
|
||
userControllerWithLogs.updateUser[1]
|
||
);
|
||
|
||
router.delete('/users/:id',
|
||
createOperationLogger({
|
||
moduleName: '用户管理',
|
||
tableName: 'users',
|
||
getRecordId: (req, res) => req.params.id,
|
||
getOperationDesc: (req, res) => `删除用户: ${req.params.id}`,
|
||
getOldData: async (req, res) => {
|
||
const oldUser = await User.findByPk(req.params.id);
|
||
return oldUser ? oldUser.toJSON() : null;
|
||
},
|
||
getNewData: () => null
|
||
}),
|
||
userControllerWithLogs.deleteUser[1]
|
||
);
|
||
|
||
module.exports = {
|
||
userControllerWithLogs,
|
||
farmControllerWithLogs,
|
||
batchOperationLogger,
|
||
router
|
||
};
|
||
|
||
/**
|
||
* 使用说明:
|
||
*
|
||
* 1. 在需要记录操作日志的控制器方法前添加 createOperationLogger 中间件
|
||
* 2. 配置中间件参数:
|
||
* - moduleName: 模块名称(如:用户管理、农场管理)
|
||
* - tableName: 数据表名(如:users、farms)
|
||
* - getRecordId: 获取记录ID的函数
|
||
* - getOperationDesc: 获取操作描述的函数
|
||
* - getOldData: 获取操作前数据的函数(可选)
|
||
* - getNewData: 获取操作后数据的函数(可选)
|
||
*
|
||
* 3. 操作日志会自动记录以下信息:
|
||
* - 操作用户信息(从req.user获取)
|
||
* - 操作类型(CREATE/UPDATE/DELETE)
|
||
* - 操作描述
|
||
* - 数据变化(操作前后的数据)
|
||
* - 请求信息(IP、URL、方法等)
|
||
* - 响应信息(状态码、执行时间等)
|
||
*
|
||
* 4. 对于批量操作,可以使用 createBatchOperationLogger 记录多个操作
|
||
*/
|