NestJS 🧑‍🍳  厨子必修课(一):后端的本质

2,315 阅读4分钟

1. 前言

前段时间看完马伯庸的《食南之志》,就想要做一个厨子。一个好厨子不能只会端菜,更要会做菜,于是就有此系列——NestJS 厨子必修课。

这一篇,笔者并不打算讲实际的代码开发,而是由生活中的实际场景来理解后端开发过程,转变前端固有思维,先观察全局,然后在此基础上进入细节。

整个系列暂时规划如下:

  1. 后端的本质
  2. 搞定 CRUD
  3. 搞定数据库(Prisma + 共享模块)
  4. 搞定登录注册(Auth 模块 + JWT + 路由守卫)
  5. 搞定 API 文档(Swagger)
  6. 搞定 API 部署(多环境 + docker-compose)

笔者觉得如果你不想变成“bug 路由器”,不想听那些不专业的技术人员鬼扯 👻,关注专栏就对了。

如果前端可以比喻为错综复杂的盘丝洞,充满了各种用户界面和交互细节,那么后端则可以比作是稳固的地基或支撑结构。后端是应用程序的服务器端,负责处理业务逻辑、数据库管理、服务器通信等,是整个应用架构的支撑,确保前端能够稳定运行。就像建筑的地基一样,后端需要稳固可靠,以支撑前端的复杂多变。

敦煌飞天壁画.png

悬空寺.png

欢迎加入技术交流群

image.png

  1. NestJS 🧑‍🍳  厨子必修课(一):后端的本质
  2. NestJS 🧑‍🍳 厨子必修课(二):项目创建
  3. NestJS 🧑‍🍳 厨子必修课(三):控制器
  4. NestJS 🧑‍🍳 厨子必修课(四):服务类
  5. NestJS 🧑‍🍳 厨子必修课(五):Prisma 集成(上)
  6. NestJS 🧑‍🍳 厨子必修课(六):Prisma 集成(下)
  7. NestJS 🧑‍🍳 厨子必修课(七):管道
  8. NestJS 🧑‍🍳 厨子必修课(八):异常过滤器

在开始之前,要讲清楚的是 CRUD 究竟是什么?所有书上都会说:

  • C:create 创建(增)
  • R:read 读取(查)
  • U:update 更新(改)
  • D:delete 删除(删)

2. 理解账房记录

让时间回到古代,我们来到一间账房,账房先生正抓耳挠腮,账本塞了满满一屋子。

账本显然用于记录商家往来的交易,上面记录着客人们各自在什么时候购买了什么东西、又买了多少、总共几钱等等。

2.1 入账

每次成交一笔记录时,账房先生总会在账本上记录一笔:

  • 吴承恩《黑神话:悟空》标准版 x 1 ¥268 PC 2024.8.19
  • 玉皇大帝 《黑神话:悟空》豪华版 x 1 ¥328 PC 2024.8.20

这就是入账,创建新的交易记录,对应的是 C,create,创建、新增。

2.2 查账

一个月过去了,掌柜的赚得金满钵满,账本记得又是密密麻麻,这时候掌柜的就要让主簿校对账本记录,他打开账本一看,便一目了然,这就是查账,就是 R,read,读取、查找。

仔细看,其实账本就是一个 excel 表格:

id姓名名称版本数量单价总价创建时间更新时间
1吴承恩《黑神话:悟空》标准版12682682024.8.192024.8.19
2玉皇大帝《黑神话:悟空》豪华版13283282024.8.202024.8.20
3姬发《黑神话:姜子牙》豪华版23286522030.8.212030.8.21

2.3 修账

有时候账本记录有误,就要重新记录,或是划掉原来的错误改正,这就是 U,update,更新、编辑、修改。如下方 id 为 2 的记录:

id姓名名称版本数量单价总价创建时间更新时间
1吴承恩《黑神话:悟空》标准版12682682024.8.192024.8.19
2玉皇大帝《黑神话:悟空》豪华版23286522024.8.202024.8.25
3姬发《黑神话:姜子牙》豪华版23286522030.8.212030.8.21

2.4 删账

偶尔翻到一条记录被划掉,这就是 D,delete,删除。如《黑神话:姜子牙》还没有发布,这条记录应该被删掉:

id姓名名称版本数量单价总价创建时间更新时间
1吴承恩《黑神话:悟空》标准版12682682024.8.192024.8.19
2玉皇大帝《黑神话:悟空》豪华版23286522024.8.202024.8.21

以上,这些记录排布在一起就形成了一张账单,有联系的账单之间将会建立索引,总之,账单聚集在一起就变成了账本,这间堆满账本的屋子就是账房。总结一下,账单相当于数据库中的数据表,账本对应不同环境下的数据库,而账房是不同的数据库系统。

3. 总结

回到当下,在用户打开浏览器页面看到自己的订单记录时,实际上是通过 HTTP 协议发起请求,服务器根据当前路由的匹配规找到对应的控制器,从而执行一个方法,这个方法会对数据库做 CRUD 的某种操作,最后由服务器响应给前端,前端浏览器完成渲染,用户就看到了新的界面。

前后端逻辑处理.png

所以,本质上整个业务流程就是一个账本管理的过程。说起来,现代的账房先生可比古时候轻松很多了。下一节将会进入到实际的代码开发中,看看如何创建一个项目。