Loading...
Loading...
Error handling patterns for robust applications. Use when implementing try-catch blocks, error boundaries, custom errors, or logging. Covers async errors, React error boundaries, and API error responses.
npx skill4agent add alicoder001/agent-skills errorsRobust error handling for production applications.
class AppError extends Error {
constructor(
public message: string,
public statusCode: number = 500,
public code?: string
) {
super(message);
this.name = 'AppError';
Error.captureStackTrace(this, this.constructor);
}
}
class NotFoundError extends AppError {
constructor(resource: string) {
super(`${resource} not found`, 404, 'NOT_FOUND');
}
}
class ValidationError extends AppError {
constructor(message: string) {
super(message, 400, 'VALIDATION_ERROR');
}
}// ✅ Async/await with try-catch
async function fetchUser(id: string) {
try {
const response = await api.get(`/users/${id}`);
return response.data;
} catch (error) {
if (error instanceof AxiosError) {
throw new AppError(error.message, error.response?.status);
}
throw error;
}
}
// ✅ Promise error handling
fetchUser(id)
.then(handleSuccess)
.catch(handleError);// Error handler middleware
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
console.error(err.stack);
if (err instanceof AppError) {
return res.status(err.statusCode).json({
success: false,
error: {
message: err.message,
code: err.code
}
});
}
res.status(500).json({
success: false,
error: {
message: 'Internal server error',
code: 'INTERNAL_ERROR'
}
});
});class ErrorBoundary extends React.Component<Props, State> {
state = { hasError: false, error: null };
static getDerivedStateFromError(error: Error) {
return { hasError: true, error };
}
componentDidCatch(error: Error, errorInfo: ErrorInfo) {
console.error('Error caught:', error, errorInfo);
// Log to error reporting service
}
render() {
if (this.state.hasError) {
return <ErrorFallback error={this.state.error} />;
}
return this.props.children;
}
}// Standard error response
interface ApiError {
success: false;
error: {
message: string;
code: string;
details?: unknown;
};
}
// Example response
{
"success": false,
"error": {
"message": "User not found",
"code": "USER_NOT_FOUND"
}
}import winston from 'winston';
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
// Usage
logger.error('Database connection failed', { error, context });