type
status
date
slug
summary
tags
category
icon
password

1. 前言

上篇以账房为例解释了后端的本质,现在进入到代码部分,看看如何使用 NestJS 创建一个项目。
先来看个小故事,从感性角度继续理解流程:
有一天,邢捕头来同福客栈吃饭,看了看菜单,想要点个鱼香肉丝。佟掌柜就去安排下去了,白展堂把消息告诉了李大嘴,大嘴看了看食材库存还够,就开始忙活了,这边刀功飞快,又是热锅冷油……只听呲啦呲啦,片刻之间,白展堂就把菜端了上来,这往桌上一摆,邢捕头拿起筷子就大口吃了起来。顷间,吕秀才已经做好了账面记录,随后撕了一张票据给老邢。
记住这个故事,往下看:
  • 同福客栈的菜单就是各路由
  • 鱼香肉丝就是某一个路由
  • 当邢捕头点了鱼香肉丝就是发送了一个 HTTP 请求
  • 佟掌柜的安排(自然知道要去找谁:让老白去厨房找大嘴)就是 Controller(控制器,接收和处理请求)
  • 真正懂炒菜业务的是大嘴,炒菜业务本身就是 Service(业务逻辑层),检查食材库存实际上就在和数据库交互
  • 餐桌上有地方放筷子、有地方放醋碟,邢捕头低头的位置就是放碗的,这就是 View(视图模版)
  • 炒完菜,邢捕头看到碗里的鱼香肉丝,(本来碗里没有鱼香肉丝到有鱼香肉丝)就是浏览器渲染页面,把请求的数据渲染了出来
如果从 B端、C端角度:
  • 佟掌柜拿出菜单给老邢,老邢点菜(C 端)
  • 炒菜当然要检查食材库存,所以对于大嘴来说厨房的库存就是一本账本(B 端)
  • 炒完了端出来,秀才就知道这单成了,成交记录 +1(B 端)
  • 邢捕头高高兴兴拿着票据回衙门报销(C 端)

2. 创建项目

现在使用 Nest 创建一个项目。

2.1 安装

2.2 初始化项目

cook-api-1 就是这个 Nest 项目的名字,随便起。

2.3 启动项目

访问 http://localhost:3000/ 可以看到 Hello World! 的画面。
Hello World!
Hello World!

2.4 打包构建

运行以上命令即可完成项目打包构建,并在项目目录下生成一个 dist 目录。

2.5 运行生产环境代码

有了 dist 产物,执行以下命令即可运行打包后的项目,这也是上线后的运行效果。
⚠️ 注意:在 package.json 中的这条脚本命令是:"start:prod": "node dist/main" ,这表示说运行的入口文件是 dist 下的 main.js,如果是接入 prisma 等 ORM 工具,打包后的目录结构有所不同,这里是需要修改的。

3. 约定大于配置

Nest 提供了一种“约定大于配置”的架构形式,它的意义在于减少配置,让开发者在规定区域编写代码,减轻开发压力和心智负担。
在 src 目录下有以下文件:
src 目录文件
src 目录文件
  • .controller.ts:处理 http 请求以及调用 service 层方法
  • .service.ts:封装通用的业务逻辑、与数据层交互(数据库 CRUD 操作)、其他额外的第三方请求
  • .module.ts:模块,注入控制器和服务
继续往下看可以发现每一组资源都对应了这三种文件,它们各自约好了在其中应该写什么内容,而不是自己去配置、去封装。就好像感冒了不会去吃咳嗽药一样。

4. 总结

这篇博客以武林外传的故事串联起整个业务流程,另外还介绍了如何使用 NestJS 去创建和构建并运行一个项目,以及 NestJS 中的 src 文件构成。
 
NestJS 🧑‍🍳 厨子必修课(三):控制器NestJS 🧑‍🍳 厨子必修课(一):后端的本质
Eric 见嘉
Eric 见嘉
Less is more.
公告
type
status
date
slug
summary
tags
category
icon
password
💭
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。

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