装饰器讲解(day 2)

86 阅读2分钟

在学习nest之前,需要对装饰器有一定了解,后续的nest开发中会用到各种各样的装饰器。

装饰器

装饰器(Decorators)是一种在 JavaScript 中用于修改类、方法、属性等的语法特性,可以模块化的方式来扩展或修改类的行为。在文件中用@添加装饰器。

在tsconfig.json文件开启"experimentalDecorators": true,即可

image.png

1.类装饰器

会把装饰的class类的构造函数作为装饰器的参数传入,通过prototype定义其属性和方法。

image.png

2.方法装饰器

用于修饰类方法的装饰器。接受三个参数:目标对象、方法名、属性描述符。

image.png

3.属性装饰器

用于修饰类属性的装饰器。接受两个参数:目标对象和属性名。

image.png

4.参数装饰器

用于修饰函数参数的装饰器。接受三个参数:目标对象、方法名、参数在参数列表中的索引。

image.png

Nest常见装饰器

@Module 装饰器 用于定义 Nest.js 模块,通常标注在类上,表示一个模块的入口点。

@Module({ controllers: [MyController], providers: [MyService], }) 
export class MyModule {}

@Controller 装饰器 用于定义控制器,处理 HTTP 请求。

@Controller('example') 
export class MyController {}

@Injectable 装饰器 标注在服务类上,表示该类可以被 Nest.js 的依赖注入系统注入到其他模块中

@Injectable() 
export class MyService {}

@Get@Post@Put@Delete 等 HTTP 方法装饰器 标注在控制器类的方法上,指定对应的 HTTP 请求方法。

@Get() 
findAll(): string { return 'This action returns all items'; }

@Param@Query@Body 等参数装饰器 标注在控制器类的方法参数上,用于提取 HTTP 请求中的参数。

@Get(':id') 
findOne(@Param('id') id: string): string {
      return `This action returns item #${id}`;
}

@UseGuards@UseInterceptors@UsePipes 等中间件和拦截器装饰器 用于在控制器类的方法上应用中间件、拦截器或守卫。

@UseGuards(AuthGuard) 
@UseInterceptors(LoggingInterceptor) 
@UsePipes(ValidationPipe)