- 重构项目结构:controllers/services -> modules模块化组织 - 新增Drizzle ORM集成和数据库schema定义 - 添加完整的开发规范文档(.cursor/rules/) - 重新组织插件结构为子目录方式 - 新增用户模块和示例代码 - 更新类型定义并移除试验性代码 - 添加API文档和JWT使用示例 关联任务计划文档
83 lines
2.6 KiB
TypeScript
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,
|
|
};
|
|
}
|
|
}
|
|
});
|