🎯

nodejs-best-practices

🎯Skill

from hainamchung/agent-assistant

VibeIndex|
What it does

Guides developers in making strategic Node.js architecture and framework decisions by providing context-aware selection principles and modern runtime considerations.

πŸ“¦

Part of

hainamchung/agent-assistant(227 items)

nodejs-best-practices

Installation

npm installInstall npm package
npm install -g @namch/agent-assistant
git cloneClone repository
git clone https://github.com/hainamchung/agent-assistant.git
Node.jsRun Node.js server
node cli/install.js install cursor # Cursor
Node.jsRun Node.js server
node cli/install.js install claude # Claude Code
Node.jsRun Node.js server
node cli/install.js install copilot # GitHub Copilot

+ 7 more commands

πŸ“– Extracted from docs: hainamchung/agent-assistant
1Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

Node.js development principles and decision-making. Framework selection, async patterns, security, and architecture. Teaches thinking, not copying.

Overview

# Node.js Best Practices

> Principles and decision-making for Node.js development in 2025.

> Learn to THINK, not memorize code patterns.

---

⚠️ How to Use This Skill

This skill teaches decision-making principles, not fixed code to copy.

  • ASK user for preferences when unclear
  • Choose framework/pattern based on CONTEXT
  • Don't default to same solution every time

---

1. Framework Selection (2025)

Decision Tree

```

What are you building?

β”‚

β”œβ”€β”€ Edge/Serverless (Cloudflare, Vercel)

β”‚ └── Hono (zero-dependency, ultra-fast cold starts)

β”‚

β”œβ”€β”€ High Performance API

β”‚ └── Fastify (2-3x faster than Express)

β”‚

β”œβ”€β”€ Enterprise/Team familiarity

β”‚ └── NestJS (structured, DI, decorators)

β”‚

β”œβ”€β”€ Legacy/Stable/Maximum ecosystem

β”‚ └── Express (mature, most middleware)

β”‚

└── Full-stack with frontend

└── Next.js API Routes or tRPC

```

Comparison Principles

| Factor | Hono | Fastify | Express |

|--------|------|---------|---------|

| Best for | Edge, serverless | Performance | Legacy, learning |

| Cold start | Fastest | Fast | Moderate |

| Ecosystem | Growing | Good | Largest |

| TypeScript | Native | Excellent | Good |

| Learning curve | Low | Medium | Low |

Selection Questions to Ask:

  1. What's the deployment target?
  2. Is cold start time critical?
  3. Does team have existing experience?
  4. Is there legacy code to maintain?

---

2. Runtime Considerations (2025)

Native TypeScript

```

Node.js 22+: --experimental-strip-types

β”œβ”€β”€ Run .ts files directly

β”œβ”€β”€ No build step needed for simple projects

└── Consider for: scripts, simple APIs

```

Module System Decision

```

ESM (import/export)

β”œβ”€β”€ Modern standard

β”œβ”€β”€ Better tree-shaking

β”œβ”€β”€ Async module loading

└── Use for: new projects

CommonJS (require)

β”œβ”€β”€ Legacy compatibility

β”œβ”€β”€ More npm packages support

└── Use for: existing codebases, some edge cases

```

Runtime Selection

| Runtime | Best For |

|---------|----------|

| Node.js | General purpose, largest ecosystem |

| Bun | Performance, built-in bundler |

| Deno | Security-first, built-in TypeScript |

---

3. Architecture Principles

Layered Structure Concept

```

Request Flow:

β”‚

β”œβ”€β”€ Controller/Route Layer

β”‚ β”œβ”€β”€ Handles HTTP specifics

β”‚ β”œβ”€β”€ Input validation at boundary

β”‚ └── Calls service layer

β”‚

β”œβ”€β”€ Service Layer

β”‚ β”œβ”€β”€ Business logic

β”‚ β”œβ”€β”€ Framework-agnostic

β”‚ └── Calls repository layer

β”‚

└── Repository Layer

β”œβ”€β”€ Data access only

β”œβ”€β”€ Database queries

└── ORM interactions

```

Why This Matters:

  • Testability: Mock layers independently
  • Flexibility: Swap database without touching business logic
  • Clarity: Each layer has single responsibility

When to Simplify:

  • Small scripts β†’ Single file OK
  • Prototypes β†’ Less structure acceptable
  • Always ask: "Will this grow?"

---

4. Error Handling Principles

Centralized Error Handling

```

Pattern:

β”œβ”€β”€ Create custom error classes

β”œβ”€β”€ Throw from any layer

β”œβ”€β”€ Catch at top level (middleware)

└── Format consistent response

```

Error Response Philosophy

```

Client gets:

β”œβ”€β”€ Appropriate HTTP status

β”œβ”€β”€ Error code for programmatic handling

β”œβ”€β”€ User-friendly message

└── NO internal details (security!)

Logs get:

β”œβ”€β”€ Full stack trace

β”œβ”€β”€ Request context

β”œβ”€β”€ User ID (if applicable)

└── Timestamp

```

Status Code Selection

| Situation | Status | When |

|-----------|--------|------|

| Bad input | 400 | Client sent invalid data |

| No auth | 401 | Missing or invalid credentials |

| No permission | 403 | Valid auth, but not allowed |

| Not found | 404 | Resource doesn't exist |

| Conflict | 409 | Duplicate or state conflict |

| Validation | 422 | Schema valid but business rules fail |

| Server error | 500 | Our fault, log everything |

---

5. Async Patterns Principles

When to Use Each

| Pattern | Use When |

|---------|----------|

| async/await | Sequential async operations |

| Promise.all | Parallel independent operations |

| Promise.allSettled | Parallel where some can fail |

| Promise.race | Timeout or first response wins |

Event Loop Awareness

```

I/O-bound (async helps):

β”œβ”€β”€ Database queries

β”œβ”€β”€ HTTP requests

β”œβ”€β”€ File system

└── Network operations

CPU-bound (async doesn't help):

β”œβ”€β”€ Crypto operations

β”œβ”€β”€ Image processing

β”œβ”€β”€ Complex calculations

└── β†’ Use worker threads or offload

```

Avoiding Event Loop Blocking

  • Never use sync methods in production (fs.readFileSync, etc.)
  • Offload CPU-intensive work
  • Use streaming for large data

---

6. Validation Principles

Validate at Boundaries

```

Where to validate:

β”œβ”€β”€ API entry point (request body/params)

β”œβ”€β”€ Before database operations

β”œβ”€β”€ External data (API responses, file uploads)

└── Environment variables (startup)

```

Validation Library Selection

| Library | Best For |

|---------|----------|

| Zod | TypeScript first, inference |

| Valibot | Smaller bundle (tree-shakeable) |

| ArkType | Performance critical |

| Yup | Existing React Form usage |

Validation Philosophy

  • Fail fast: Validate early
  • Be specific: Clear error messages
  • Don't trust: Even "internal" data

---

7. Security Principles

Security Checklist (Not Code)

  • [ ] Input validation: All inputs validated
  • [ ] Parameterized queries: No string concatenation for SQL
  • [ ] Password hashing: bcrypt or argon2
  • [ ] JWT verification: Always verify signature and expiry
  • [ ] Rate limiting: Protect from abuse
  • [ ] Security headers: Helmet.js or equivalent
  • [ ] HTTPS: Everywhere in production
  • [ ] CORS: Properly configured
  • [ ] Secrets: Environment variables only
  • [ ] Dependencies: Regularly audited

Security Mindset

```

Trust nothing:

β”œβ”€β”€ Query params β†’ validate

β”œβ”€β”€ Request body β†’ validate

β”œβ”€β”€ Headers β†’ verify

β”œβ”€β”€ Cookies β†’ validate

β”œβ”€β”€ File uploads β†’ scan

└── External APIs β†’ validate response

```

---

8. Testing Principles

Test Strategy Selection

| Type | Purpose | Tools |

|------|---------|-------|

| Unit | Business logic | node:test, Vitest |

| Integration | API endpoints | Supertest |

| E2E | Full flows | Playwright |

What to Test (Priorities)

  1. Critical paths: Auth, payments, core business
  2. Edge cases: Empty inputs, boundaries
  3. Error handling: What happens when things fail?
  4. Not worth testing: Framework code, trivial getters

Built-in Test Runner (Node.js 22+)

```

node --test src/*/.test.ts

β”œβ”€β”€ No external dependency

β”œβ”€β”€ Good coverage reporting

└── Watch mode available

```

---

10. Anti-Patterns to Avoid

❌ DON'T:

  • Use Express for new edge projects (use Hono)
  • Use sync methods in production code
  • Put business logic in controllers
  • Skip input validation
  • Hardcode secrets
  • Trust external data without validation
  • Block event loop with CPU work

βœ… DO:

  • Choose framework based on context
  • Ask user for preferences when unclear
  • Use layered architecture for growing projects
  • Validate all inputs
  • Use environment variables for secrets
  • Profile before optimizing

---

11. Decision Checklist

Before implementing:

  • [ ] Asked user about stack preference?
  • [ ] Chosen framework for THIS context? (not just default)
  • [ ] Considered deployment target?
  • [ ] Planned error handling strategy?
  • [ ] Identified validation points?
  • [ ] Considered security requirements?

---

> Remember: Node.js best practices are about decision-making, not memorizing patterns. Every project deserves fresh consideration based on its requirements.

More from this repository10

🎯
senior-devops🎯Skill

Skill

🎯
cpp-pro🎯Skill

Develops high-performance C++ applications with modern C++20/23 features, template metaprogramming, and zero-overhead systems design.

🎯
senior-architect🎯Skill

Designs scalable software architectures using modern tech stacks, generating architecture diagrams, analyzing dependencies, and providing system design recommendations.

🎯
senior-frontend🎯Skill

Generates, analyzes, and scaffolds modern frontend projects using ReactJS, NextJS, TypeScript, and Tailwind CSS with automated best practices.

🎯
spec-miner🎯Skill

Extracts and documents specifications from legacy or undocumented codebases by systematically analyzing code structure, data flows, and system behaviors.

🎯
docs-seeker🎯Skill

Searches and retrieves technical documentation by executing intelligent scripts across library sources, GitHub repos, and context7.com with automated query detection.

🎯
writing-plans🎯Skill

Generates comprehensive, step-by-step implementation plans for software features with precise file paths, test-driven development approach, and clear task granularity.

🎯
file path traversal testing🎯Skill

Tests and identifies potential file path traversal vulnerabilities in code by analyzing file path handling and input validation mechanisms.

🎯
media-processing🎯Skill

Converts, encodes, manipulates, and optimizes multimedia files using FFmpeg and ImageMagick with support for 100+ formats and hardware acceleration.

🎯
red-team-tactics🎯Skill

Simulates adversarial attack techniques across MITRE ATT&CK framework phases, mapping network vulnerabilities and demonstrating systematic compromise strategies.