diff --git a/middleware/errorHandler.js b/middleware/errorHandler.js index f7888e6..5129cbd 100644 --- a/middleware/errorHandler.js +++ b/middleware/errorHandler.js @@ -14,14 +14,16 @@ const errorHandler = (err, req, res, next) => { console.error(err); } // 提取错误信息 - const statusCode = err.statusCode || err.status || 500; - const message = err.message || "服务器错误"; - const details = err.details || null; + const statusCode = err.statusCode || err.status || 500; + const message = err.message || "服务器错误"; + const details = err.details || null; + const code = err.code || undefined; // 返回统一格式的错误响应 return res.status(statusCode).json({ success: false, message: message, + code: code, details: details, error: process.env.NODE_ENV === "production" diff --git a/middleware/jwt-auth.js b/middleware/jwt-auth.js index ef94a47..5d4a6e2 100644 --- a/middleware/jwt-auth.js +++ b/middleware/jwt-auth.js @@ -76,7 +76,10 @@ export const jwtAuth = async (req, res, next) => { } if (newTokenError.name === 'TokenExpiredError' || legacyTokenError.name === 'TokenExpiredError') { - return next(errors.createError(401, "JWT token已过期")); + // 统一的账户JWT过期返回 + // message: JWT_EXPIRED(用于客户端稳定识别) + // code: AUTH_JWT_EXPIRED(业务错误码) + return next(errors.createError(401, "JWT_EXPIRED", null, "AUTH_JWT_EXPIRED")); } return next(errors.createError(401, "token验证失败")); diff --git a/utils/errors.js b/utils/errors.js index fa179c7..1e96af4 100644 --- a/utils/errors.js +++ b/utils/errors.js @@ -1,16 +1,18 @@ /** * 创建标准错误对象 * @param {number} statusCode - HTTP状态码 - * @param {string} [message] - 错误消息 + * @param {string} [message] - 错误消息(推荐使用稳定的机器可读文本,如 JWT_EXPIRED) * @param {object} [details] - 附加信息 + * @param {string} [code] - 业务错误码(如 AUTH_JWT_EXPIRED) * @returns {object} 标准错误对象 */ -const createError = (statusCode, message, details = null) => { +const createError = (statusCode, message, details = null, code = null) => { // 直接返回错误对象,不抛出异常 const error = { statusCode: statusCode, message: message || '服务器错误', - details: details + details: details, + code: code || undefined, }; return error; };