为什么用 Nest
这节要解决什么
明白 Nest 解决什么痛点,以及它和 Express、和你熟悉的 Vue/Nuxt 怎么对应。
先用大白话
Express 很自由:一个文件里也能写完全部路由。项目小的时候爽,人一多、模块一多,就会出现:
- 路由、校验、数据库访问搅在一起
- 不知道公共逻辑该放哪
- TypeScript 类型要自己一点点拼
Nest 像给 Node 后端加了一套「官方推荐的文件夹与规矩」:
- 用 模块 切开功能(用户、书签、认证…)
- 控制器 只负责接 HTTP
- 服务 只负责干活(查库、算业务)
- 天然 TypeScript
可以这么类比:
| Nest | 你可能熟悉的 |
|---|---|
| 整个 Nest 项目 | 一个规整的 Nuxt / 后端工程 |
| Module | 功能模块目录(auth/、bookmarks/) |
| Controller | 路由入口(像 pages/server 的「入口层」) |
| Service | 真正的业务函数(像 composable / service) |
| Guard | 路由守卫(没登录别进来) |
| Pipe / DTO | 表单校验 |
| 底层 HTTP | 默认 Express(也可换 Fastify) |
所以:学 Nest 不是丢掉 Express,而是 在 Express 之上用更清晰的结构写长期项目。
主项目是什么
贯穿后面章节的项目:
「个人书签」:
- 注册 / 登录
- 登录后才能管理自己的书签
- 数据存在 SQLite(Prisma)
领域简单,但够覆盖实战里最常见的后端技能。
先跑起来(感受一下)
cd projects/03-nest-bookmark-api
npm install
npx prisma migrate dev
npm run start:dev浏览器打开:http://localhost:3000(若有欢迎信息或健康检查)。
接口文档感可以先用 curl;后面联调再用 Vue。
若某步报错,先看该项目的
README.md。
验收清单
- 能用自己的话解释:为什么不只用 Express
- 能说出 Module / Controller / Service 的分工(大白话版)
- 知道主项目在
projects/03-nest-bookmark-api
下一节 → 02-模块-控制器-服务.md