type
status
date
slug
summary
tags
category
icon
password

1. 前言

前段时间看完马伯庸的《食南之志》,就想要做一个厨子。一个好厨子不能只会端菜,更要会做菜,于是就有此系列——NestJS 厨子必修课。
这一篇,笔者并不打算讲实际的代码开发,而是由生活中的实际场景来理解后端开发过程,转变前端固有思维,先观察全局,然后在此基础上进入细节。
整个系列暂时规划如下:
  1. 后端的本质
  1. 搞定 CRUD
  1. 搞定数据库(Prisma + 共享模块)
  1. 搞定登录注册(Auth 模块 + JWT + 路由守卫)
  1. 搞定 API 文档(Swagger)
  1. 搞定 API 部署(多环境 + docker-compose)
笔者觉得如果你不想变成“bug 路由器”,不想听那些不专业的技术人员鬼扯👻,关注专栏就对了。
如果前端可以比喻为错综复杂的盘丝洞,充满了各种用户界面和交互细节,那么后端则可以比作是稳固的地基或支撑结构。后端是应用程序的服务器端,负责处理业务逻辑、数据库管理、服务器通信等,是整个应用架构的支撑,确保前端能够稳定运行。就像建筑的地基一样,后端需要稳固可靠,以支撑前端的复杂多变。
敦煌飞天壁画
敦煌飞天壁画
悬空寺
悬空寺
在开始之前,要讲清楚的是 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
吴承恩
《黑神话:悟空》
标准版
1
268
268
2024.8.19
2024.8.19
2
玉皇大帝
《黑神话:悟空》
豪华版
1
328
328
2024.8.20
2024.8.20
3
姬发
《黑神话:姜子牙》
豪华版
2
328
652
2030.8.21
2030.8.21

2.3 修账

有时候账本记录有误,就要重新记录,或是划掉原来的错误改正,这就是 U,update,更新、编辑、修改。如下方 id 为 2 的记录:
id
姓名
名称
版本
数量
单价
总价
创建时间
更新时间
1
吴承恩
《黑神话:悟空》
标准版
1
268
268
2024.8.19
2024.8.19
2
玉皇大帝
《黑神话:悟空》
豪华版
2
328
652
2024.8.20
2024.8.25
3
姬发
《黑神话:姜子牙》
豪华版
2
328
652
2030.8.21
2030.8.21

2.4 删账

偶尔翻到一条记录被划掉,这就是 D,delete,删除。如《黑神话:姜子牙》还没有发布,这条记录应该被删掉:
id
姓名
名称
版本
数量
单价
总价
创建时间
更新时间
1
吴承恩
《黑神话:悟空》
标准版
1
268
268
2024.8.19
2024.8.19
2
玉皇大帝
《黑神话:悟空》
豪华版
2
328
652
2024.8.20
2024.8.21
以上,这些记录排布在一起就形成了一张账单,有联系的账单之间将会建立索引,总之,账单聚集在一起就变成了账本,这间堆满账本的屋子就是账房。总结一下,账单相当于数据库中的数据表,账本对应不同环境下的数据库,而账房是不同的数据库系统。

3. 总结

回到当下,在用户打开浏览器页面看到自己的订单记录时,实际上是通过 HTTP 协议发起请求,服务器根据当前路由的匹配规找到对应的控制器,从而执行一个方法,这个方法会对数据库做 CRUD 的某种操作,最后由服务器响应给前端,前端浏览器完成渲染,用户就看到了新的界面。
前后端逻辑处理
前后端逻辑处理
所以,本质上整个业务流程就是一个账本管理的过程。说起来,现代的账房先生可比古时候轻松很多了。下一节将会进入到实际的代码开发中,看看如何创建一个项目。
 
 
NestJS 🧑‍🍳 厨子必修课(二):项目创建团队协作(三)—— husky + lint-staged 增量检测(支持 tsx)
Eric 见嘉
Eric 见嘉
Less is more.
公告
type
status
date
slug
summary
tags
category
icon
password
💭
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。

关于我
土木转行的前端开发工程师,陆续分享技术干货。
联系我
微信公众号:见嘉 Being Dev