返回

Nest.js 高级模块化:使用约束类型构建灵活的应用程序

后端

Nest.js 快速入门(8/10)——更多模块

Nest.js 中还提供了 4 个额外的构造块,它们扩充了基本的功能。这些构造块可以是:

  • 全局范围
  • 控制器范围
  • 方法范围
  • 参数范围(仅适用于管道)

这些不同的绑定约束为应用程序的不同级别提供了强大的力度和控制,每个约束都不尽相同。

全局范围

全局范围是约束模块最广泛的方式,它允许您在整个应用程序中注入模块。这对于需要在整个应用程序中可用的服务(如数据库连接或日志记录器)非常有用。

要创建全局模块,请使用 @Global() 装饰器:

import { Module } from '@nestjs/common';
import { DatabaseService } from './database.service';

@Global()
@Module({
  providers: [DatabaseService],
  exports: [DatabaseService],
})
export class DatabaseModule {}

控制器范围

控制器范围使您能够将模块限制到特定的控制器。这对于需要与特定控制器关联的模块非常有用,例如用于验证或授权的模块。

要创建控制器范围模块,请使用 @Module() 装饰器并指定控制器作为 controllers 数组:

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

@Module({
  controllers: [UsersController],
  providers: [UsersService],
})
export class UsersModule {}

方法范围

方法范围允许您将模块限制到特定的控制器方法。这对于需要仅在某些方法中可用的模块非常有用,例如用于缓存或性能优化的模块。

要创建方法范围模块,请使用 @Injectable() 装饰器并指定方法作为 scope 属性:

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

@Injectable({ scope: 'method' })
export class CacheService {
  // ...
}

参数范围(仅适用于管道)

参数范围是一种特殊的约束类型,仅适用于管道。它允许您将模块注入到管道中特定参数的位置。这对于需要根据请求参数执行特定操作的模块非常有用,例如用于验证或转换的模块。

要创建参数范围模块,请使用 @Injectable() 装饰器并指定参数索引作为 scope 属性:

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

@Injectable({ scope: 'param', paramIndex: 0 })
export class ValidationPipe {
  // ...
}

这些不同的约束类型提供了构建模块化、可测试和可维护的 Nest.js 应用程序所需的灵活性。通过了解这些约束,您可以创建满足您特定应用程序需求的自定义模块。


以下是更新的文章标题和优化后的元数据: