/** * 基础控制器类 * 提供控制器的通用功能和标准化响应格式 */ export class BaseController { constructor() { this.serviceName = this.constructor.name.replace('Controller', 'Service') } /** * 成功响应 */ success(ctx, data = null, message = '操作成功', code = 200) { ctx.status = code ctx.body = { success: true, code, message, data, timestamp: Date.now() } } /** * 错误响应 */ error(ctx, message = '操作失败', code = 400, data = null) { ctx.status = code ctx.body = { success: false, code, message, data, timestamp: Date.now() } } /** * 分页响应 */ paginate(ctx, data, pagination, message = '获取成功') { ctx.body = { success: true, code: 200, message, data, pagination, timestamp: Date.now() } } /** * 获取查询参数 */ getQuery(ctx) { return ctx.query || {} } /** * 获取请求体 */ getBody(ctx) { return ctx.request.body || {} } /** * 获取路径参数 */ getParams(ctx) { return ctx.params || {} } /** * 获取用户信息 */ getUser(ctx) { return ctx.state.user || null } /** * 验证必需参数 */ validateRequired(data, requiredFields) { const missing = [] requiredFields.forEach(field => { if (!data[field] && data[field] !== 0) { missing.push(field) } }) if (missing.length > 0) { throw new Error(`缺少必需参数: ${missing.join(', ')}`) } } /** * 异步错误处理装饰器 */ static asyncHandler(fn) { return async (ctx, next) => { try { await fn(ctx, next) } catch (error) { console.error('Controller error:', error) ctx.status = error.status || 500 ctx.body = { success: false, code: error.status || 500, message: error.message || '服务器内部错误', timestamp: Date.now() } } } } } export default BaseController