学习资源
计划推荐的资源,按主题整理,并注明在哪一天用到;然后是 TaskFlow 项目本身:在哪里、怎么运行、学习期间怎么用它。
官方文档
NestJS
官方文档 docs.nestjs.com 是每一章的参考依据。计划提到了 Overview、Techniques、Security 和 Recipes 这几个部分。后来 Techniques 部分被拆分到了 Application、Data 和 HTTP 里;旧的 /techniques/... 地址会重定向到新地址。本课程用得到的页面:
| 部分 | 页面 | 天 |
|---|---|---|
| Overview | First steps、Controllers、Providers、Modules | J1 至 J3 |
| Overview | Middleware、Exception filters、Pipes、Interceptors | J6 |
| Overview | Guards、Custom decorators | J8 |
| Fundamentals | Custom providers、Dynamic modules、Injection scopes、Circular dependency | J3 |
| Fundamentals | Lifecycle events | J7 |
| Fundamentals | Testing | J10 |
| Application | Validation、Serialization | J2、J8 |
| Application | Configuration、Logging | J7 |
| Application | Events、Task scheduling、Queues | J9 |
| Data | TypeORM | J4、J5 |
| HTTP | Versioning | J2 |
| Security | Authentication、Authorization、Encryption and Hashing | J8 |
| Security | Security headers、CORS、Rate limiting | J11 |
| Recipes | Passport | J8 |
| Recipes | Async local storage | 按请求保存上下文(陷阱) |
| Reliability | Health checks(Terminus) | J11 |
| OpenAPI | Introduction、CLI Plugin、Mapped Types | J2、J11 |
| CLI | Overview | J1 |
| FAQ | Request lifecycle | J6 |
官方课程
计划推荐官方课程“NestJS Fundamentals”,从文档里的“Official courses”链接进入(courses.nestjs.com)。 计划说它是免费的;但在撰写本页时(2026 年 10 月),这门课是付费的,只有一节课免费开放。最接近的免费替代是文档里的 Fundamentals 部分,见上表。
TypeORM
typeorm.io,尤其是:
| 主题 | 页面 | 天 |
|---|---|---|
| 实体和列 | Entities | J4 |
| 查询 | Find options、Select Query Builder | J4 |
| 连接选项 | Data source options | J4 |
| 关系 | Many-to-one / one-to-many、Eager and lazy relations | J5 |
| 迁移 | Generating、Executing、Reverting | J5 |
| 事务 | Transactions | J5 |
Node.js
- The Node.js Event Loop: 事件循环的各个阶段、
setImmediate、process.nextTick。J1 之前读(事件循环)。 - Worker threads:把 CPU 计算放到主线程之外 (差异)。
- Asynchronous context tracking:
AsyncLocalStorage。
生态工具
- TypeScript 装饰器:Nest 所依赖的“实验性”装饰器。
- class-validator:校验装饰器列表。
- Jest。
- BullMQ:重试、退避(backoff)、worker。
- oxlint 及其 no-floating-promises 规则。
- Docker Compose profile。
TaskFlow 项目
TaskFlow 是学习过程中构建的 API,位于本网站仓库的 examples/ 目录下。网站上的所有代码片段都来自它,被引用的片段一旦 消失,网站构建就会失败。项目能编译,通过 lint,27 个单元测试(行覆盖率 86.3%)和 8 个基于真实 PostgreSQL 的端到端 测试全部通过。Docker 镜像能构建并启动;GitLab 流水线没有实际运行过。
| 文件 | 内容 |
|---|---|
README.md | 启动、脚本、Docker 操作顺序(含迁移)、目录结构 |
LEARNINGS.md | 每日学习日志模板(方法) |
docker-compose.yml、.env.example | 本地环境(Docker Compose 与 .env) |
Dockerfile、.gitlab-ci.yml | 镜像和流水线(J11) |
.gitignore、.dockerignore | 不进 git、不进镜像的内容(node_modules、dist、coverage、除 .env.example 外的 .env*) |
src/、test/ | 代码,按领域组织(结构) |
运行 API
cd examples
cp .env.example .env.development
docker compose up -d # PostgreSQL + Adminer (http://localhost:8081)
npm ci
npm run migration:run
npm run seed # admin@taskflow.local / admin-password-dev
npm run start:dev # Swagger 在 http://localhost:3000/docs这些命令不需要 export 任何变量:应用读取 .env.development,Compose 只在 app 容器上才要求 JWT_SECRET (说明)。种子数据创建的是开发账号;创建时可以用 SEED_ADMIN_PASSWORD 指定它的密码。
想在容器里运行 API,而不是用 npm run start:dev:export 一个真正的 JWT_SECRET,构建镜像,用 npm run migration:run:prod 执行迁移,然后启动 app profile(操作顺序)。
检查项目
npm run typecheck && npm run lint && npm test # 编译、oxlint、单元测试
npm run test:cov # 带覆盖率阈值
cp .env.example .env.test # 然后设置 DB_PORT=5433、DB_NAME=taskflow_test、NODE_ENV=test
docker compose up -d db-test && npm run test:e2e学习期间怎么用它
- 当参考答案:一天一天地重建 TaskFlow,卡住时和完成的项目对比。每章都会指出每一步对应哪个文件。
- 当试验场:改动代码,看某个陷阱会造成什么后果(去掉一个
await、在测试库上把synchronize设为true、去掉@Exclude()),再跑测试。 - 以后当参考:场景速查从一个具体需求出发,带你找到解决它的 TaskFlow 文件。