用途
该技能用于指导 Node.js 后端项目的工程化开发,围绕 Express/Fastify 与仓储模式(Repository Pattern)组织代码,强调业务逻辑与副作用分离、依赖注入、输入校验和错误处理。
项目结构
采用分层目录:
src/core/:纯业务逻辑,包含types.ts(领域类型)、errors.ts(领域错误)与services/(纯函数,如user.ts、order.ts)。src/infra/:副作用层,包含http/(server.ts服务启动、routes/路由处理器、middleware/Express 中间件)、db/(client.ts数据库连接、repositories/数据访问、migrations/结构迁移)、external/(第三方 API)。src/config/:配置,index.ts负责环境变量校验。src/index.ts:入口点。tests/:分为unit/与integration/。- 根目录含
package.json与CLAUDE.md。
主要能力
API 设计
路由处理器模式:在 routes/users.ts 中引入 Router、zod、核心服务与仓储,定义 CreateUserSchema(email 为邮箱格式,name 长度 1–100),通过 createUserRoutes(userRepo) 返回路由,POST 处理中解析请求体、调用服务并返回 201,异常交给 next(error)。
组合根依赖注入:在 index.ts 中创建数据库客户端、实例化 UserRepository,再通过 createApp({ userRoutes: createUserRoutes(userRepo) }) 组装应用并监听 3000 端口。
错误处理
领域错误:DomainError 继承 Error,携带 code 与 statusCode(默认 400);NotFoundError 返回 404 与 NOT_FOUND;ValidationError 返回 400 与 VALIDATION_ERROR。
全局错误处理器:errorHandler 中间件区分 DomainError(按状态码返回 code 与 message)、ZodError(返回 400 与校验详情),其余记录日志并返回 500 与 INTERNAL_ERROR。
数据库模式
仓储模式:UserRepository 基于 Kysely,提供 findById(查询 users 表,无结果返回 null)与 create(插入并返回全部字段)。
事务:transferFunds 使用 db.transaction().execute,在事务内对 accounts 表执行余额加减更新。
配置
使用 Zod 定义 ConfigSchema,校验 NODE_ENV(development/production/test)、PORT(默认 3000)、DATABASE_URL(URL 格式)、API_KEY(非空),通过 loadConfig() 解析 process.env。
测试
单元测试针对 core 服务,使用 mock 仓储(如 jest.fn())验证 createUser 行为与调用次数。集成测试使用 supertest 与测试辅助函数 createTestApp、createTestDb,验证 POST /users 返回 201 及响应体。
使用方式
资料未提供安装命令或具体调用步骤,仅给出代码示例与目录约定,可据此在项目中落地相应模式。
适用场景
适用于需要清晰分层、可测试、可维护的 Node.js 后端服务开发,尤其是使用 Express/Fastify 与 Kysely 的项目。
限制与反模式
资料列出应避免的做法:回调地狱(应使用 async/await)、未处理的 Promise 拒绝、阻塞事件循环、代码中硬编码密钥、SQL 字符串拼接、缺少输入校验、生产环境使用 console.log、缺少优雅关闭(应处理 SIGTERM)、单体式路由文件(应按资源拆分)。