cursor-init/src/plugins/errorHandle/errorHandler.plugins.ts
expressgy a23d336ebd refactor: 重构项目架构并标准化开发规范
- 重构项目结构:controllers/services -> modules模块化组织

- 新增Drizzle ORM集成和数据库schema定义

- 添加完整的开发规范文档(.cursor/rules/)

- 重新组织插件结构为子目录方式

- 新增用户模块和示例代码

- 更新类型定义并移除试验性代码

- 添加API文档和JWT使用示例

关联任务计划文档
2025-06-30 01:25:17 +08:00

83 lines
2.6 KiB
TypeScript

/**
* @file 全局错误处理中间件
* @author hotok
* @date 2025-06-28
* @lastEditor hotok
* @lastEditTime 2025-06-28
* @description 全局错误处理中间件,支持分环境详细度、自动错误日志记录
*/
import { Elysia } from 'elysia';
/**
* 全局错误处理插件
*/
export const errorHandlerPlugin = (app: Elysia) =>
app.onError(({ error, set, code, log, env }) => {
switch (code) {
case 'VALIDATION': {
set.status = 400;
let errors = null as any;
if (env === 'development') {
errors = error.all.map((err) => ({
field: err.path?.slice(1) || 'root',
message: err.message,
expected: err.schema,
received: err.value,
}));
} else {
errors = error.all.map((err) => err.message);
}
return {
code: 400,
message: '参数验证失败',
errors,
};
}
case 'NOT_FOUND': {
set.status = 404;
return {
code: 404,
message: '找不到资源',
};
}
case 'INTERNAL_SERVER_ERROR': {
set.status = 500;
log.error(error);
return {
code: 500,
message: '服务器内部错误',
errors: error.message,
};
}
case 'PARSE': {
set.status = 400;
return {
code: 400,
message: '解析错误',
errors: error.message,
};
}
default: {
// 处理 ElysiaCustomStatusResponse status抛出的异常
if (error?.constructor?.name === 'ElysiaCustomStatusResponse') {
set.status = error.code;
return {
code: error.code,
message: error.response.message || error.response || '服务器内部错误',
errors: error,
};
}
console.log('error', error);
set.status = 500;
log.error(error);
return {
code: 500,
message: '服务器内部错误',
errors: error.message,
};
}
}
});