Files
record-app-next/lib/errors/app-error.ts
2025-07-31 17:05:07 +08:00

61 lines
1.6 KiB
TypeScript

export class AppError extends Error {
public readonly statusCode: number
public readonly isOperational: boolean
public readonly code?: string
constructor(
message: string,
statusCode: number = 500,
code?: string,
isOperational: boolean = true
) {
super(message)
this.statusCode = statusCode
this.code = code
this.isOperational = isOperational
Error.captureStackTrace(this, this.constructor)
}
}
export class ValidationError extends AppError {
constructor(message: string, code?: string) {
super(message, 400, code || 'VALIDATION_ERROR')
}
}
export class AuthenticationError extends AppError {
constructor(message: string = '未授权访问', code?: string) {
super(message, 401, code || 'AUTHENTICATION_ERROR')
}
}
export class AuthorizationError extends AppError {
constructor(message: string = '权限不足', code?: string) {
super(message, 403, code || 'AUTHORIZATION_ERROR')
}
}
export class NotFoundError extends AppError {
constructor(message: string = '资源不存在', code?: string) {
super(message, 404, code || 'NOT_FOUND_ERROR')
}
}
export class ConflictError extends AppError {
constructor(message: string, code?: string) {
super(message, 409, code || 'CONFLICT_ERROR')
}
}
export class RateLimitError extends AppError {
constructor(message: string = '请求过于频繁', code?: string) {
super(message, 429, code || 'RATE_LIMIT_ERROR')
}
}
export class InternalServerError extends AppError {
constructor(message: string = '服务器内部错误') {
super(message, 500, 'INTERNAL_SERVER_ERROR', false)
}
}