env-manage-plugin
Version:
A dev env plugin that integrates an Express server with request proxying capabilities.
43 lines (42 loc) • 1.64 kB
JavaScript
import { AppError } from "../utils/errors.js";
/**
* 全局错误处理中间件
*
* 统一捕获并处理应用中抛出的所有错误(包括自定义错误和系统错误),
* 通过响应增强器提供的 res.error() 方法返回标准化错误响应。
*
* @param {Error} err - 捕获到的错误对象,可能是自定义错误或系统原生错误
* @param {Request} req - Express 请求对象
* @param {Response} res - Express 响应对象(已通过 responseEnhancer 增强,包含 error 方法)
* @returns {void} 无返回值,直接通过 res.error() 发送响应
*
* @example
* // 在 Express 应用中注册
* app.use(globalErrorHandler);
*
* @example
* // 抛出错误时会被此中间件捕获
* throw new AppError('资源未找到', 404, 10001);
*/
export const globalErrorHandler = (err, req, res,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
next) => {
// 初始化响应信息
let code;
let message;
let status = 0;
// 处理自定义错误(业务已知错误)
if (err instanceof AppError) {
code = err.code;
message = err.message;
status = err.status;
}
else {
// 处理系统错误(如TypeError、ReferenceError等未知错误)
console.error("系统错误详情:", err); // 记录详细错误日志用于排查
code = 500; // 业务状态码:服务器内部错误
message = "服务器内部错误"; // 对用户展示的友好信息(避免暴露敏感信息)
}
// 使用增强的响应方法发送标准化错误响应
res.error(message, code, { status });
};