Loading...
Loading...
Compare original and translation side by side
| Context | Choose | Why |
|---|---|---|
| Edge/Serverless | Hono | Zero-dep, fastest cold starts |
| Performance API | Fastify | 2-3x faster than Express, built-in schema validation |
| Enterprise/team | NestJS | DI, decorators, structured conventions |
| Legacy/ecosystem | Express | Most middleware, widest adoption |
| 场景 | 选择框架 | 原因 |
|---|---|---|
| 边缘计算/无服务器 | Hono | 零依赖,冷启动速度最快 |
| 高性能API | Fastify | 速度比Express快2-3倍,内置Schema验证 |
| 企业级/团队项目 | NestJS | 依赖注入、装饰器、结构化规范 |
| 遗留项目/生态兼容 | Express | 中间件最丰富,普及率最高 |
src/
├── routes/ # HTTP: parse request, call service, format response
├── middleware/ # Auth, validation, rate limiting, logging
├── services/ # Business logic (no HTTP types)
├── repositories/ # Data access only (queries, ORM)
├── config/ # Env, DB pool, constants
└── types/ # Shared TypeScript interfacessrc/
├── routes/ # HTTP层:解析请求、调用服务、格式化响应
├── middleware/ # 鉴权、验证、请求频率限制、日志
├── services/ # 业务逻辑(无HTTP类型依赖)
├── repositories/ # 仅数据访问(查询、ORM)
├── config/ # 环境变量、数据库连接池、常量
└── types/ # 共享TypeScript接口import type { }interfaceunknownanyz.infer<typeof Schema>asdeclare module 'pkg' { const v: unknown; export default v; }types/ambient.d.tsimport type { }interfaceunknownanyz.infer<typeof Schema>astypes/ambient.d.tsdeclare module 'pkg' { const v: unknown; export default v; }.extend().pick().omit().partial().merge().extend().pick().omit().partial().merge()AppError(message, statusCode, isOperational)ValidationError(400)NotFoundError(404)UnauthorizedError(401)ForbiddenError(403)ConflictError(409)AppError{ error: message }const asyncHandler = (fn) => (req, res, next) => Promise.resolve(fn(req, res, next)).catch(next);AppError(message, statusCode, isOperational)ValidationError(400)NotFoundError(404)UnauthorizedError(401)ForbiddenError(403)ConflictError(409)AppError{ error: message }const asyncHandler = (fn) => (req, res, next) => Promise.resolve(fn(req, res, next)).catch(next);/users/users/:id/orders/api/v1/{ data, pagination?: { page, limit, total, totalPages } }{ error: { code, message, details? } }?page=1&limit=20&status=active&sort=createdAt,descLocation/users/users/:id/orders/api/v1/{ data, pagination?: { page, limit, total, totalPages } }{ error: { code, message, details? } }?page=1&limit=20&status=active&sort=createdAt,descLocation| Pattern | Use When |
|---|---|
| Sequential operations |
| Parallel independent ops |
| Parallel, some may fail |
| Timeout or first-wins |
readFileSync| 模式 | 使用场景 |
|---|---|
| 串行操作 |
| 并行独立操作 |
| 并行操作,允许部分失败 |
| 超时控制或先完成优先 |
readFileSync