con un clic
nodejs-best-practices
Node.js 开发原则与决策方法。覆盖框架选型、异步模式、安全与架构设计。强调思考,而非照抄。
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Node.js 开发原则与决策方法。覆盖框架选型、异步模式、安全与架构设计。强调思考,而非照抄。
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
务实的编码标准—— 简洁、直接、不做过度设计、不写无用注释(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 最佳实践的核心是“决策能力”,不是“背模板”。每个项目都应基于其真实需求重新判断。