为个人理财启动 NestJS API
发布: (2026年2月3日 GMT+8 09:41)
4 min read
原文: Dev.to
Source: Dev.to
概览
大多数在线的 NestJS 教程只停留在基础的 CRUD 操作或简单的 TODO 列表应用。本系列将超越这些入门示例,从零构建一个 个人理财 API——一个可投入生产的 REST API,用于管理收入、支出和账户类型。
每篇文章都是 3–4 分钟的短阅读,聚焦于应用的某个具体方面。阅读完毕后,你将拥有一个功能完整的 API,能够进一步扩展或与任意前端集成。
架构
- NestJS – 后端框架(TypeScript、依赖注入、装饰器)
- Supabase – PostgreSQL 数据库托管与认证
- Drizzle ORM – 类型安全的数据库查询与迁移
- REST – 清晰的资源建模
功能模块
auth– 用户认证与授权accounts– 账户类型:现金、借记卡、信用卡transactions– 收入与支出记录categories– 交易分类
我们将在整个系列中使用语义化版本号(例如 v0.1.0 → v0.1.1 → … → v1.0.0)。
引导 NestJS 应用
# 全局安装 Nest CLI
npm i -g @nestjs/cli
# 创建新项目
nest new finance-api
# 选择你喜欢的包管理器 (npm, yarn, 或 pnpm)
CLI 会生成一个干净的项目结构,包含:
- TypeScript 配置
- 基础模块、控制器和服务
- 使用 Jest 的测试设置
- ESLint 与 Prettier 配置
项目结构
src/
├── auth/ # 认证模块
├── accounts/ # 账户模块
├── transactions/ # 交易模块
├── categories/ # 分类模块
├── common/ # 共享工具、装饰器、守卫
│ ├── decorators/
│ ├── guards/
│ ├── interceptors/
│ └── filters/
├── config/ # 配置模块
├── database/ # 数据库连接与 Drizzle 设置
│ ├── migrations/
│ ├── schema/
│ └── seeds/
├── app.module.ts
└── main.ts
Supabase 提供的功能
- 托管的 PostgreSQL 数据库,自动备份
- 内置认证(邮箱/密码、OAuth、魔法链接)
- 实时订阅(可用于未来功能)
- 自动生成的 REST API(我们将自行构建)
- 免费层足以满足开发需求
为什么选择 Drizzle ORM?
- 完全的 TypeScript 类型安全,无需装饰器
- 轻量且性能出色(比 TypeORM 更快)
- 类 SQL 语法,易于学习
- 迁移系统友好,适合版本控制
- 与 NestJS 的模块化架构完美集成
考虑的替代方案: Prisma(很好,但 Drizzle 在查询控制和复杂关联的性能上更优)。
目前已完成的工作
- ✅ 一个干净的 NestJS 项目,已准备好开发
- ✅ 对整体架构的理解
- ✅ 清晰的文件夹结构,便于代码组织
- ✅ 了解我们为何选择 Supabase 与 Drizzle
下一步
查看目前的代码:
🔗 代码: [GitHub repository]
💡 下一篇文章: 我们将设置 Supabase。