Error handling patterns for Express.js applications
View on GitHubplugins/aai-stack-express/skills/express-error-handling/SKILL.md
February 1, 2026
Select agents to install to:
npx add-skill https://github.com/the-answerai/alphaagent-team/blob/main/plugins/aai-stack-express/skills/express-error-handling/SKILL.md -a claude-code --skill express-error-handlingInstallation paths:
.claude/skills/express-error-handling/# Express Error Handling Skill
Patterns for comprehensive error handling in Express.js.
## Error Class Hierarchy
### Base Application Error
```typescript
export class AppError extends Error {
public readonly statusCode: number
public readonly code: string
public readonly isOperational: boolean
constructor(
message: string,
statusCode: number = 500,
code: string = 'INTERNAL_ERROR',
isOperational: boolean = true
) {
super(message)
this.statusCode = statusCode
this.code = code
this.isOperational = isOperational
Error.captureStackTrace(this, this.constructor)
}
}
```
### Specific Error Classes
```typescript
export class NotFoundError extends AppError {
constructor(resource: string, id?: string) {
const message = id
? `${resource} with ID ${id} not found`
: `${resource} not found`
super(message, 404, 'NOT_FOUND')
}
}
export class ValidationError extends AppError {
public readonly details: Record<string, string[]>
constructor(message: string, details: Record<string, string[]> = {}) {
super(message, 400, 'VALIDATION_ERROR')
this.details = details
}
}
export class UnauthorizedError extends AppError {
constructor(message: string = 'Unauthorized') {
super(message, 401, 'UNAUTHORIZED')
}
}
export class ForbiddenError extends AppError {
constructor(message: string = 'Forbidden') {
super(message, 403, 'FORBIDDEN')
}
}
export class ConflictError extends AppError {
constructor(message: string) {
super(message, 409, 'CONFLICT')
}
}
export class RateLimitError extends AppError {
public readonly retryAfter: number
constructor(retryAfter: number = 60) {
super('Too many requests', 429, 'RATE_LIMIT_EXCEEDED')
this.retryAfter = retryAfter
}
}
```
## Error Handler Middleware
### Main Error Handler
```typescript
import { Request, Response, NextFunction } from 'express'
interface ErrorResponse {
error: {
code: string
message: string
det