From 4ec10acfcf6e44e6d5cdda5cbf92198889fa6eaa Mon Sep 17 00:00:00 2001 From: Sunwuyuan Date: Sun, 16 Nov 2025 16:11:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=BC=BA=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=A4=84=E7=90=86=EF=BC=8C=E7=BB=9F=E4=B8=80JWT=E8=BF=87?= =?UTF-8?q?=E6=9C=9F=E8=BF=94=E5=9B=9E=E6=A0=BC=E5=BC=8F=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=B8=9A=E5=8A=A1=E9=94=99=E8=AF=AF=E7=A0=81=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- middleware/errorHandler.js | 8 +++++--- middleware/jwt-auth.js | 5 ++++- utils/errors.js | 8 +++++--- 3 files changed, 14 insertions(+), 7 deletions(-) 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; };