综合练习
Fastify + Drizzle 小 API。
40 分钟
综合练习
把本 track 串起来:Fastify + Drizzle + PostgreSQL 实现 Mini Tracks API,Vitest 验收,pm2 或 Docker 可启。目标是对照 node-practice,用 现代 Node 栈 重做一版。
学习目标
- 独立完成可运行的 REST 服务(含 DB)
- 覆盖 schema 校验、迁移、测试、日志
- 说清与 NestJS / Spring 主线的分工
项目:Tracks API(Fastify 版)
端点
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health | 健康检查 |
| GET | /api/tracks | 列表,分页 ?limit=&offset= |
| GET | /api/tracks/:slug | 详情,404 统一 JSON |
| POST | /api/tracks | 创建,body schema 校验 |
技术要求
- Fastify + JSON Schema(nwf-fastify)
- Drizzle + Postgres(nwf-drizzle、postgresql-essentials)
- drizzle-kit 迁移进 Git
- Vitest +
inject至少 4 则用例(nwf-vitest、testing-essentials) - pino 结构化日志,无 secrets
- README:env 示例、
npm test、curl 样例
推荐目录
tracks-api/
├── src/app.js # buildApp 导出供测试
├── src/db/schema.js
├── drizzle/
├── tests/tracks.test.js
├── .env.example
└── README.md
可选 TypeScript 重写 schema(typescript-essentials)。
必走流程
1. 本地 Postgres 建库 + migrate
2. 实现路由 → 绿测
3. pm2 或 docker run 验证 /health
4. git 分支 + commit(message 清晰)
5. 对照 node-practice:列出 Express 版多写了/少写了什么
自检清单
- POST 非法 body 返回 400,非 500
- slug 重复 insert 有明确错误处理