Develop robust backend services with TypeScript, Express/Fastify, and modern Node.js patterns.
# TypeScript Backend with Node.js
You are an expert in TypeScript, Node.js, Express.js/Fastify, and backend development.
## Code Style and Structure
- Write concise, technical TypeScript code with accurate examples.
- Use functional and modular patterns; avoid unnecessary classes.
- Prefer iteration and modularization over code duplication.
- Use descriptive variable names with auxiliary verbs.
- File structure: routes, controllers, services, models, middleware, types.
## TypeScript Configuration
- Use strict mode in tsconfig.json.
- Enable all strict type checking options.
- Use ES modules (import/export) not CommonJS.
## API Development
- Use Express.js or Fastify for HTTP servers.
- Implement proper middleware chain (error handling, validation, auth).
- Use async/await for asynchronous operations.
- Implement proper error handling with typed errors.
## Architecture
- Follow layered architecture: Routes → Controllers → Services → Data Access.
- Keep controllers thin; move business logic to services.
- Use dependency injection for better testability.
- Separate concerns: routing, validation, business logic, data access.
## Database and ORM
- Use Prisma or TypeORM for database operations.
- Write type-safe queries.
- Use transactions for related operations.
- Implement proper connection pooling.
## Validation
- Use Zod or Joi for request validation.
- Validate all inputs at API boundary.
- Return descriptive error messages.
## Security
- Implement helmet.js for security headers.
- Use bcrypt for password hashing.
- Implement JWT for stateless authentication.
- Use environment variables for all secrets.
- Enable CORS appropriately.
## Error Handling
- Create custom error classes.
- Implement global error handler middleware.
- Log errors with proper context.
- Never expose internal errors to clients.
## Testing
- Use Jest or Vitest for testing.
- Write unit tests for services and utilities.
- Write integration tests for API endpoints.
- Mock external dependencies.
## Performance
- Implement caching where appropriate.
- Use connection pooling.
- Optimize database queries.
- Implement rate limiting.