/** * 统一响应工具函数 * 规范所有接口的返回数据格式 */ /** * 成功响应 * @param {object} res - Express响应对象 * @param {string} message - 成功消息 * @param {any} data - 响应数据 * @param {number} statusCode - HTTP状态码,默认200 */ const success = (res, message = '操作成功', data = null, statusCode = 200) => { res.status(statusCode).json({ code: 200, message, data }); }; /** * 错误响应 * @param {object} res - Express响应对象 * @param {string} message - 错误消息 * @param {number} code - 错误码,默认500 * @param {number} statusCode - HTTP状态码,默认对应code */ const error = (res, message = '操作失败', code = 500, statusCode = null) => { const httpStatus = statusCode || code; res.status(httpStatus).json({ code, message, data: null }); }; /** * 参数错误响应 (400) * @param {object} res - Express响应对象 * @param {string} message - 错误消息 */ const badRequest = (res, message = '请求参数错误') => { error(res, message, 400); }; /** * 未授权响应 (401) * @param {object} res - Express响应对象 * @param {string} message - 错误消息 */ const unauthorized = (res, message = '未授权,请先登录') => { error(res, message, 401); }; /** * 禁止访问响应 (403) * @param {object} res - Express响应对象 * @param {string} message - 错误消息 */ const forbidden = (res, message = '没有权限执行此操作') => { error(res, message, 403); }; /** * 资源不存在响应 (404) * @param {object} res - Express响应对象 * @param {string} message - 错误消息 */ const notFound = (res, message = '资源不存在') => { error(res, message, 404); }; /** * 服务器错误响应 (500) * @param {object} res - Express响应对象 * @param {string} message - 错误消息 * @param {Error} err - 错误对象(仅在开发环境返回) */ const serverError = (res, message = '服务器内部错误', err = null) => { const response = { code: 500, message, data: null }; // 开发环境下返回错误详情 if (process.env.NODE_ENV === 'development' && err) { response.error = err.message; response.stack = err.stack; } res.status(500).json(response); }; /** * 创建成功响应 (201) * @param {object} res - Express响应对象 * @param {string} message - 成功消息 * @param {any} data - 响应数据 */ const created = (res, message = '创建成功', data = null) => { success(res, message, data, 201); }; module.exports = { success, error, badRequest, unauthorized, forbidden, notFound, serverError, created };