SuperAPI AI 工具集

backend-dev-guidelines

编程与开发

查看项目

更新于 10-16 06:03

技能介绍

用途

本技能用于在 Node.js/Express/TypeScript 微服务(如 blog-api、auth-service、notifications-service)中建立一致的开发规范与最佳实践。当进行以下工作时会自动激活:创建或修改路由、端点、API;构建控制器、服务、仓储;实现中间件(认证、校验、错误处理);使用 Prisma 进行数据库操作;使用 Sentry 进行错误追踪;使用 Zod 进行输入校验;配置管理;后端测试与重构。

架构与目录结构

采用分层架构,请求自上而下流经各层:

HTTP Request
    ↓
Routes (routing only)
    ↓
Controllers (request handling)
    ↓
Services (business logic)
    ↓
Repositories (data access)
    ↓
Database (Prisma)

关键原则:每一层只承担一项职责。

目录结构示例:

service/src/
├── config/              # UnifiedConfig
├── controllers/         # Request handlers
├── services/            # Business logic
├── repositories/        # Data access
├── routes/              # Route definitions
├── middleware/          # Express middleware
├── types/               # TypeScript types
├── validators/          # Zod schemas
├── utils/               # Utilities
├── tests/               # Tests
├── instrument.ts        # Sentry (FIRST IMPORT)
├── app.ts               # Express setup
└── server.ts            # HTTP server

命名约定:控制器用 PascalCase(UserController.ts);服务用 camelCase(userService.ts);路由用 camelCase + Routes(userRoutes.ts);仓储用 PascalCase + Repository(UserRepository.ts)。

核心原则(7 条关键规则)

  1. 路由只负责路由,控制器负责控制。禁止在路由中写业务逻辑,应委托给控制器:
// ❌ NEVER: Business logic in routes
router.post('/submit', async (req, res) => {
    // 200 lines of logic
});

// ✅ ALWAYS: Delegate to controller
router.post('/submit', (req, res) => controller.submit(req, res));
  1. 所有控制器继承 BaseController:
export class UserController extends BaseController {
    async getUser(req: Request, res: Response): Promise<void> {
        try {
            const user = await this.userService.findById(req.params.id);
            this.handleSuccess(res, user);
        } catch (error) {
            this.handleError(error, res, 'getUser');
        }
    }
}
  1. 所有错误上报 Sentry:
try {
    await operation();
} catch (error) {
    Sentry.captureException(error);
    throw error;
}
  1. 使用 unifiedConfig,绝不使用 process.env:
// ❌ NEVER
const timeout = process.env.TIMEOUT_MS;

// ✅ ALWAYS
import { config } from './config/unifiedConfig';
const timeout = config.timeouts.default;
  1. 用 Zod 校验所有输入:
const schema = z.object({ email: z.string().email() });
const validated = schema.parse(req.body);
  1. 数据访问使用仓储模式(Service → Repository → Database):
const users = await userRepository.findActive();
  1. 要求完整测试:
describe('UserService', () => {
    it('should create user', async () => {
        expect(user).toBeDefined();
    });
});

常用导入

// Express
import express, { Request, Response, NextFunction, Router } from 'express';

// Validation
import { z } from 'zod';

// Database
import { PrismaClient } from '@prisma/client';
import type { Prisma } from '@prisma/client';

// Sentry
import * as Sentry from '@sentry/node';

// Config
import { config } from './config/unifiedConfig';

// Middleware
import { SSOMiddlewareClient } from './middleware/SSOMiddleware';
import { asyncErrorWrapper } from './middleware/errorBoundary';

快速参考

HTTP 状态码:200 成功;201 已创建;400 错误请求;401 未授权;403 禁止;404 未找到;500 服务器错误。

服务模板:Blog API(成熟)可作为 REST API 模板;Auth Service(成熟)可作为认证模式模板。

应避免的反模式:路由中写业务逻辑;直接使用 process.env;缺少错误处理;无输入校验;到处直接使用 Prisma;用 console.log 代替 Sentry。

新功能与新微服务检查清单

新后端功能:路由(定义清晰,委托给控制器);控制器(继承 BaseController);服务(含依赖注入的业务逻辑);仓储(复杂时使用);校验(Zod schema);Sentry(错误追踪);测试(单元 + 集成);配置(使用 unifiedConfig)。

新微服务:目录结构(见 architecture-overview.md);Sentry 的 instrument.ts;unifiedConfig 设置;BaseController 类;中间件栈;错误边界;测试框架。

导航与资源文件

需要理解架构读 architecture-overview.md;创建路由/控制器读 routing-and-controllers.md;组织业务逻辑读 services-and-repositories.md;校验输入读 validation-patterns.md;添加错误追踪读 sentry-and-monitoring.md;创建中间件读 middleware-guide.md;数据库访问读 database-patterns.md;管理配置读 configuration.md;处理异步/错误读 async-and-errors.md;编写测试读 testing-guide.md;查看示例读 complete-examples.md。

资源文件涵盖:分层架构、请求生命周期、关注点分离;路由定义、BaseController、错误处理;服务模式、依赖注入、仓储模式、缓存;Zod schema、校验、DTO 模式;Sentry 初始化、错误捕获、性能监控;认证、审计、错误边界、AsyncLocalStorage;PrismaService、仓储、事务、优化;UnifiedConfig、环境配置、密钥;异步模式、自定义错误、asyncErrorWrapper;单元/集成测试、mock、覆盖率;完整示例与重构指南。

相关技能

database-verification:验证列名与 schema 一致性;error-tracking:Sentry 集成模式;skill-developer:创建与管理技能的元技能。

技能状态:COMPLETE;行数:< 500;渐进式披露:11 个资源文件。