3. Nest.js 模块:模块化架构的力量

277 阅读3分钟

3. Nest.js 模块:模块化架构的力量

介绍

欢迎回来!在前两篇文章中,我们已经成功搭建了开发环境,并创建了一个简单的 Nest.js 应用。现在,是时候深入了解 Nest.js 的模块化架构了。模块化是 Nest.js 的核心理念之一,它让你的应用更易于维护和扩展。今天,我们将一起探索模块的魔力!

什么是模块?

在 Nest.js 中,模块就像是应用的“房间”,每个房间都有特定的功能和职责。通过将相关的功能组织在一起,模块让你的代码更加清晰和有条理。每个 Nest.js 应用至少有一个模块,那就是根模块(AppModule)。

创建一个新模块

让我们动手创建一个新模块,看看它是如何工作的。假设我们要创建一个用户模块来管理用户相关的功能。

首先,使用 Nest CLI 创建一个新模块:

nest generate module users

这条命令会在 src 目录下生成一个 users 目录,并在其中创建一个 users.module.ts 文件。让我们看看这个文件的内容:

import { Module } from '@nestjs/common';

@Module({})
export class UsersModule {}

看起来很简单,对吧?这是一个基本的模块定义。接下来,我们将为这个模块添加一些功能。

添加控制器和服务

我们需要一个控制器来处理用户相关的请求,还需要一个服务来处理业务逻辑。使用 Nest CLI 分别创建控制器和服务:

nest generate controller users
nest generate service users

这两条命令会在 users 目录下生成 users.controller.tsusers.service.ts 文件。让我们看看这些文件的内容。

users.controller.ts
import { Controller, Get } from '@nestjs/common';
import { UsersService } from './users.service';

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get()
  findAll(): string {
    return this.usersService.findAll();
  }
}
  • @Controller('users'):定义一个控制器,并指定路由前缀为 users
  • @Get():定义一个 GET 请求的路由。
  • findAll 方法:调用 UsersServicefindAll 方法,并返回结果。
users.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class UsersService {
  findAll(): string {
    return 'This action returns all users';
  }
}
  • @Injectable:定义一个可注入的服务。
  • findAll 方法:返回一个字符串,表示获取所有用户的操作。

将控制器和服务添加到模块

现在,我们需要将 UsersControllerUsersService 添加到 UsersModule 中。打开 users.module.ts 文件,修改如下:

import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';

@Module({
  controllers: [UsersController],
  providers: [UsersService],
})
export class UsersModule {}
  • controllers 数组:包含了该模块的控制器。
  • providers 数组:包含了该模块的提供者(服务)。

将新模块导入根模块

最后,我们需要将 UsersModule 导入到根模块 AppModule 中。打开 app.module.ts 文件,修改如下:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UsersModule } from './users/users.module';

@Module({
  imports: [UsersModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
  • imports 数组:包含了该模块的导入模块。

运行应用

现在,我们已经完成了所有的配置。让我们运行应用并测试一下。

在项目根目录下运行以下命令:

npm run start

打开浏览器,访问 http://localhost:3000/users,你应该会看到 "This action returns all users" 的响应。这表示我们的用户模块已经成功运行!

结论

在这篇文章中,我们深入了解了 Nest.js 的模块化架构,并创建了一个用户模块。通过将相关的功能组织在一起,模块让我们的代码更加清晰和有条理