专栏名称: 程序员大咖
程序员大咖,努力成就期待着的自己。分享程序员技术文章、程序员工具资源、程序员精选课程、程序员视频教程、程序员热点资讯、程序员学习资料等。
目录
相关文章推荐
广东攻略  ·  “生三孩补贴10000元”热传,广东一地发声 ·  23 小时前  
广东攻略  ·  “生三孩补贴10000元”热传,广东一地发声 ·  23 小时前  
开平广播电视台  ·  @开平街坊,这一公交线路临时调整! ·  昨天  
歸藏的AI工具箱  ·  Manus 团队成员回应所谓的代码和方案泄露 ·  2 天前  
歸藏的AI工具箱  ·  Manus 团队成员回应所谓的代码和方案泄露 ·  2 天前  
51好读  ›  专栏  ›  程序员大咖

图解Nestjs - 适合中国宝宝的入门指导

程序员大咖  · 公众号  ·  · 2025-03-05 10:24

正文

笔者入门Nest的时候属实是迷糊了一阵,本文将从初学者的视角出发,试图为大家解释Nestjs到底是如何运作的。如有错误欢迎指出,谢谢~



假设我们来做这样一个服务:宝可梦大全

提供四个接口:

  1. 获取完整的宝可梦列表
  2. 根据宝可梦编号获取某一只宝可梦的信息
  3. 获取完整的技能列表
  4. 根据某个技能获取可以学会该技能的宝可梦列表

Module = 模块

Module,中文译作模块,我们将从它来入手,搞清楚Nestjs大概是如何工作的。


官网这张图表达的很清楚,Nest的大致理念就是一颗“模块树”,从根模块出发,连接到许多的子功能模块。

我们的宝可梦查询的结构可能是这样的:

(本文中我们使用Prisma来操作数据库)

现在让我们聚焦到其中一个功能模块:Pokemon Module

细说Pokemon Module

这个模块的领域是宝可梦,显然这是一个非常核心的模块。那么“模块”,又是怎么运作的呢?

从外部看,“模块”是一个黑盒,有自己的输入和输出:

而黑盒的内部,则主要是两部分:

  1. Services
  2. Controllers

Controllers是接收请求的入口,Services则是方法实现,这个应该不难理解

那么我们仔细看看所谓的输入输出是什么。

Module的输入是什么?

由于宝可梦的信息是存在数据库中的,因此宝可梦模块需要Prisma模块来与数据库交互。所以Prisma Module是Pokemon Module的输入。

Module的输出是什么?

既然我们说Prisma Module是Pokemon Module的输入,那,Prisma Module一定是输出了什么,对吧?

没错,Prisma Module的输出就是Prisma Service。Pokemon Module可以使用Prisma Service中的各种方法来交互数据库。

Provider?

在刚刚的叙述中,我们还没有提及在Nest中非常有存在感的 Provider

我们说过,“Controllers是接收请求的入口,Services则是方法实现”,那么,Controllers是如何调用Services的呢?答案就是, 当Services成为Provider时

这就像是同一样东西的两种名字。它既是Pokemon Service,也是Pokemon Module的Provider,取决于从什么视角去看他。因此,在代码中它往往表现为这样:

// nestjs project directory
|-pokemon
| |_pokemon.module.ts
| |_pokemon.controller.ts
| |_pokemon.service.ts
|-......
// pokemon.module.ts
@Module({
  controllers: [PokemonController],
  providers: [PokemonService],
  imports: [PrismaModule],
  exports: [PokemonService],
})
// pokemon.controller.ts
export class PokemonController {
  // 正是因为Module的providers中传入了PokemonService
  // Controller的constructor才能接收到pokemonService参数
  constructor(private readonly pokemonService: PokemonService) {}
  
  @Get('/find/all')
  async findAll() {
    const allPokemons = await






请到「今天看啥」查看全文