# Nodejs Patterns

> Async control flow, error handling, module design, streams, and production hardening

- Skill: `gabrielmoreira/nodejs-patterns` (Agent Skill)
- Install (CLI): `npx skillmds@latest add gabrielmoreira/nodejs-patterns`
- Raw SKILL.md: https://api.skillmd.com/api/skills/gabrielmoreira/nodejs-patterns/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: gabrielmoreira (https://skillmd.com/u/gabrielmoreira)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/gabrielmoreira/nodejs-patterns

---


# Node.js Patterns

Production-grade Node.js backend patterns.

## Async Patterns

### Prefer Async/Await
```javascript
// Good
async function getUser(id) {
  const user = await db.findUser(id);
  return user;
}

// Avoid raw callbacks or.then() chains
```

### Parallel Execution
```javascript
// Sequential (slow)
const user = await fetchUser(id);
const posts = await fetchPosts(id);

// Parallel (fast)
const [user, posts] = await Promise.all([
  fetchUser(id),
  fetchPosts(id),
]);
```

## Error Handling

### Global Handler
```javascript
process.on('uncaughtException', (err) => {
  console.error('Uncaught:', err);
  // Graceful shutdown
  server.close(() => process.exit(1));
});

process.on('unhandledRejection', (reason) => {
  console.error('Unhandled Rejection:', reason);
});
```

### Express Error Middleware
```javascript
app.use((err, req, res, next) => {
  const status = err.status || 500;
  res.status(status).json({
    error: err.message,
    ...(process.env.NODE_ENV === 'development' && { stack: err.stack }),
  });
});
```

## Module Design
- Single responsibility per module
- Export a class or factory function, not plain objects
- Use dependency injection for testability
- Prefer CommonJS (require) or ESM (import), consistent throughout

## Production Hardening
- Cluster mode for multi-core
- Process manager (PM2) with auto-restart
- Health check endpoints
- Graceful shutdown (SIGTERM handler)
- Memory limit monitoring
- Structured logging (pino/winston)

