在学习nest之前,需要对装饰器有一定了解,后续的nest开发中会用到各种各样的装饰器。
装饰器
装饰器(Decorators)是一种在 JavaScript 中用于修改类、方法、属性等的语法特性,可以模块化的方式来扩展或修改类的行为。在文件中用@添加装饰器。
在tsconfig.json文件开启"experimentalDecorators": true,即可
1.类装饰器
会把装饰的class类的构造函数作为装饰器的参数传入,通过prototype定义其属性和方法。
2.方法装饰器
用于修饰类方法的装饰器。接受三个参数:目标对象、方法名、属性描述符。
3.属性装饰器
用于修饰类属性的装饰器。接受两个参数:目标对象和属性名。
4.参数装饰器
用于修饰函数参数的装饰器。接受三个参数:目标对象、方法名、参数在参数列表中的索引。
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)