with one click
nodejs-best-practices
Node.js 开发原则与决策方法。覆盖框架选型、异步模式、安全与架构设计。强调思考,而非照抄。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Node.js 开发原则与决策方法。覆盖框架选型、异步模式、安全与架构设计。强调思考,而非照抄。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
务实的编码标准—— 简洁、直接、不做过度设计、不写无用注释(Pragmatic coding standards)
性能分析原则。测量、分析与优化技术。
API design principles and decision-making(API 设计原则与决策逻辑)。REST vs GraphQL vs tRPC selection(选择)、response formats(响应格式)、versioning(版本控制)、pagination(分页)。
App Builder(应用构建编排器)主编排器。根据自然语言请求创建全栈应用,确定项目类型、选择技术栈并协调智能体。
Project scaffolding templates(项目脚手架模板)。用于从零创建新项目。包含 12 个技术栈模板。
Architectural decision-making framework(架构决策框架)。Requirements analysis(需求分析)、trade-off evaluation(权衡评估)、ADR documentation(架构决策记录)。Use when making architecture decisions or analyzing system design(用于架构决策与系统设计分析)。
| name | nodejs-best-practices |
| description | Node.js 开发原则与决策方法。覆盖框架选型、异步模式、安全与架构设计。强调思考,而非照抄。 |
| allowed-tools | Read, Write, Edit, Glob, Grep |
面向 2025 的 Node.js 开发原则与决策方法。
学习如何思考,不要只记代码套路。
本技能教授的是决策原则,不是固定代码模板。
你要构建什么?
|
+-- Edge/Serverless(边缘/无服务器,Cloudflare、Vercel)
| +-- Hono(零依赖、冷启动极快)
|
+-- 高性能 API
| +-- Fastify(通常比 Express 快 2-3 倍)
|
+-- 企业协作/团队熟悉度优先
| +-- NestJS(结构化、DI、装饰器)
|
+-- 传统/稳定/生态最大化
| +-- Express(成熟、middleware 最多)
|
+-- 前后端一体
+-- Next.js API Routes 或 tRPC
| 维度 | Hono | Fastify | Express |
|---|---|---|---|
| 适用场景 | Edge、serverless | 性能优先 | 传统、学习 |
| 冷启动 | 最快 | 快 | 中等 |
| 生态 | 成长中 | 较好 | 最大 |
| TypeScript | 原生支持 | 优秀 | 良好 |
| 学习曲线 | 低 | 中 | 低 |
Node.js 22+: --experimental-strip-types
+-- 可直接运行 .ts 文件
+-- 简单项目可免构建步骤
+-- 适用:脚本、简单 API
ESM(import/export)
+-- 现代标准
+-- 更好的 tree-shaking
+-- 异步模块加载
+-- 适用:新项目
CommonJS(require)
+-- 遗留兼容性更好
+-- 对部分 npm 包支持更成熟
+-- 适用:既有代码库、特定边界场景
| Runtime | 适用场景 |
|---|---|
| Node.js | 通用场景、生态最大 |
| Bun | 性能优先、内置 bundler |
| Deno | 安全优先、内置 TypeScript |
请求流(Request Flow):
|
+-- Controller/Route 层
| +-- 处理 HTTP 细节
| +-- 在边界做输入校验
| +-- 调用 service 层
|
+-- Service 层
| +-- 承载业务逻辑
| +-- 与框架解耦
| +-- 调用 repository 层
|
+-- Repository 层
+-- 仅处理数据访问
+-- 数据库查询
+-- ORM 交互
Pattern:
+-- 定义自定义错误类
+-- 各层都可 throw
+-- 在顶层统一 catch(middleware)
+-- 输出一致的响应格式
Client gets:
+-- 合理的 HTTP 状态码
+-- 可程序化处理的错误码
+-- 对用户友好的提示
+-- 不暴露内部细节(安全要求)
Logs get:
+-- 完整堆栈信息
+-- 请求上下文
+-- 用户 ID(如适用)
+-- 时间戳
| 场景 | 状态码 | 说明 |
|---|---|---|
| Bad input | 400 | 客户端输入无效 |
| No auth | 401 | 缺少或无效凭据 |
| No permission | 403 | 已认证但无权限 |
| Not found | 404 | 资源不存在 |
| Conflict | 409 | 重复或状态冲突 |
| Validation | 422 | schema 合法但业务规则失败 |
| Server error | 500 | 服务端责任,完整记录日志 |
| 模式 | 适用场景 |
|---|---|
async/await | 串行异步操作 |
Promise.all | 可并行且互不依赖 |
Promise.allSettled | 并行且允许部分失败 |
Promise.race | 超时控制或“先返回者胜出” |
I/O-bound(异步有帮助):
+-- 数据库查询
+-- HTTP 请求
+-- 文件系统
+-- 网络操作
CPU-bound(异步无帮助):
+-- 加密计算
+-- 图像处理
+-- 复杂计算
+-- -> 使用 worker threads 或外部任务卸载
fs.readFileSync)校验位置:
+-- API 入口(request body/params)
+-- 数据库操作之前
+-- 外部数据(API 响应、文件上传)
+-- 环境变量(启动时)
| 库 | 适用场景 |
|---|---|
| Zod | TypeScript 优先、类型推断友好 |
| Valibot | 包体积更小(tree-shakeable) |
| ArkType | 性能敏感场景 |
| Yup | 既有 React Form 生态 |
Trust nothing(默认不信任):
+-- Query params(查询参数)-> 校验
+-- Request body(请求体)-> 校验
+-- Headers(请求头)-> 校验
+-- Cookies -> 校验
+-- File uploads(文件上传)-> 扫描
+-- External APIs(外部 API)-> 校验响应
| 类型 | 目的 | 工具 |
|---|---|---|
| Unit(单元测试) | 业务逻辑 | node:test, Vitest |
| Integration(集成测试) | API 端点 | Supertest |
| E2E(端到端) | 完整流程 | Playwright |
node --test src/**/*.test.ts
+-- 无需额外依赖
+-- 覆盖率报告可用
+-- 支持 watch mode(监听模式)
开始实现前:
牢记: Node.js 最佳实践的核心是“决策能力”,不是“背模板”。每个项目都应基于其真实需求重新判断。