nodejs-best-practices by sickn33/antigravity-awesome-skills
npx skills add https://github.com/sickn33/antigravity-awesome-skills --skill nodejs-best-practices2025 年 Node.js 开发的原则与决策指南。学会思考,而非死记代码模式。
当您需要做出 Node.js 架构决策、选择框架、设计异步模式或应用安全与部署最佳实践时,请使用此技能。
此技能教授的是决策原则,而非供复制的固定代码。
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
| 因素 | Hono | Fastify |
|---|
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| Express |
|---|
| 最适合 | 边缘计算,无服务器 | 性能 | 遗留项目,学习 |
| 冷启动 | 最快 | 快 | 中等 |
| 生态系统 | 增长中 | 良好 | 最大 |
| TypeScript | 原生支持 | 优秀 | 良好 |
| 学习曲线 | 低 | 中等 | 低 |
Node.js 22+: --experimental-strip-types
├── Run .ts files directly
├── No build step needed for simple projects
└── Consider for: scripts, simple APIs
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
| 运行时 | 最适合 |
|---|---|
| Node.js | 通用目的,最大的生态系统 |
| Bun | 性能,内置打包工具 |
| Deno | 安全优先,内置 TypeScript |
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
Pattern:
├── Create custom error classes
├── Throw from any layer
├── Catch at top level (middleware)
└── Format consistent response
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
| 情况 | 状态码 | 何时使用 |
|---|---|---|
| 错误输入 | 400 | 客户端发送了无效数据 |
| 未认证 | 401 | 缺少或凭证无效 |
| 无权限 | 403 | 认证有效,但操作不被允许 |
| 未找到 | 404 | 资源不存在 |
| 冲突 | 409 | 重复或状态冲突 |
| 验证失败 | 422 | 模式有效但业务规则失败 |
| 服务器错误 | 500 | 我方错误,记录所有信息 |
| 模式 | 使用时机 |
|---|---|
async/await | 顺序的异步操作 |
Promise.all | 并行的独立操作 |
Promise.allSettled | 并行操作,其中一些可能失败 |
Promise.race | 超时或首个响应胜出 |
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
Where to validate:
├── API entry point (request body/params)
├── Before database operations
├── External data (API responses, file uploads)
└── Environment variables (startup)
| 库 | 最适合 |
|---|---|
| Zod | TypeScript 优先,类型推断 |
| Valibot | 更小的包体积(可 tree-shake) |
| ArkType | 性能关键 |
| Yup | 已有 React Form 使用场景 |
Trust nothing:
├── Query params → validate
├── Request body → validate
├── Headers → verify
├── Cookies → validate
├── File uploads → scan
└── External APIs → validate response
| 类型 | 目的 | 工具 |
|---|---|---|
| 单元测试 | 业务逻辑 | node:test, Vitest |
| 集成测试 | API 端点 | Supertest |
| 端到端测试 | 完整流程 | Playwright |
node --test src/**/*.test.ts
├── No external dependency
├── Good coverage reporting
└── Watch mode available
在实施前:
记住:Node.js 最佳实践关乎决策,而非记忆模式。每个项目都应根据其需求进行全新的考量。
每周安装量
1.2K
代码仓库
GitHub 星标数
27.1K
首次出现
Jan 20, 2026
安全审计
安装于
gemini-cli988
opencode983
codex940
github-copilot904
cursor807
amp758
Principles and decision-making for Node.js development in 2025. Learn to THINK, not memorize code patterns.
Use this skill when making Node.js architecture decisions, choosing frameworks, designing async patterns, or applying security and deployment best practices.
This skill teaches decision-making principles , not fixed code to copy.
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
| 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 |
Node.js 22+: --experimental-strip-types
├── Run .ts files directly
├── No build step needed for simple projects
└── Consider for: scripts, simple APIs
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 | Best For |
|---|---|
| Node.js | General purpose, largest ecosystem |
| Bun | Performance, built-in bundler |
| Deno | Security-first, built-in TypeScript |
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
Pattern:
├── Create custom error classes
├── Throw from any layer
├── Catch at top level (middleware)
└── Format consistent response
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
| 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 |
| 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 |
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
Where to validate:
├── API entry point (request body/params)
├── Before database operations
├── External data (API responses, file uploads)
└── Environment variables (startup)
| Library | Best For |
|---|---|
| Zod | TypeScript first, inference |
| Valibot | Smaller bundle (tree-shakeable) |
| ArkType | Performance critical |
| Yup | Existing React Form usage |
Trust nothing:
├── Query params → validate
├── Request body → validate
├── Headers → verify
├── Cookies → validate
├── File uploads → scan
└── External APIs → validate response
| Type | Purpose | Tools |
|---|---|---|
| Unit | Business logic | node:test, Vitest |
| Integration | API endpoints | Supertest |
| E2E | Full flows | Playwright |
node --test src/**/*.test.ts
├── No external dependency
├── Good coverage reporting
└── Watch mode available
Before implementing:
Remember : Node.js best practices are about decision-making, not memorizing patterns. Every project deserves fresh consideration based on its requirements.
Weekly Installs
1.2K
Repository
GitHub Stars
27.1K
First Seen
Jan 20, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
gemini-cli988
opencode983
codex940
github-copilot904
cursor807
amp758
React 组合模式指南:Vercel 组件架构最佳实践,提升代码可维护性
102,200 周安装