Nestjs核心模块:
@nestjs/core
@nestjs/common:
装饰器:
装饰器所在模块:'@nestjs/common';
常用装饰器:@Module() @Controller() @Injectable() @Get() @Post() @Request() @Response()@Next() @Session()@Param()@Body()@Query()@Headers()@HttpCode()
@Module(): 类装饰器
可传入一个对象类型的参数
@Module({
imports: [], // 依赖注入子模块
controllers: [AppController], // 注入模块控制器
providers: [AppService], // 注入模块的Service
})
@Controller(): 类装饰器
可传入字符串类型参数,对应请求的路由
@Controller({
path:'user',
version:'1'
})
指定当前控制器的路由是'user' ,版本是1,使用的时候是localhost:3000/v1/user
@Injectable():类装饰器
用于定义一个类可以被依赖注入(Dependency Injection,DI)。NestJS的DI容器会负责创建和管理该类,在需要该类的地方注入。
export class AppController {
constructor(private readonly appService: AppService) {}
}
因为AppService类添加了@Injectable()依赖注入,DI容器会在这里注入。
@Request(): 参数装饰器
作用是将参数变为Request对象,然后可以获取请求参数、请求头等信息
@Query(): 参数装饰器
作用是将参数变为请求url的query对象,然后可以获取请求参数。也可以用req.query代替。
@Get()
getHello(@Request() req,@Query() qs): string {
console.log(qs,'qs')
console.log(req.query,'req')
return this.appService.getHello();
}
@Body('xxx'):参数装饰器
主要作用将参数转变为Body对象,直接获取请求体的参数。
同样可以通过req.body来获取
通过传参可以直接获取body的属性
@Post('setHello')
setHello(@Request() req,@Body('name') body):string{
console.log(body,'body')
console.log(req.body,'req')
return 'post'
}
@Get()和 @Post(): 函数装饰器
根据Restful协议将控制器的函数映射为GeT或Post请求响应。
可传参数,将函数的url变为动态路由
@Get('getHello/:id')
getHello(@Request() req,@Query() qs,@Param('id') id): string {
console.log(qs,'qs')
console.log(req.query,'req')
console.log(id,'id')
return this.appService.getHello();
}
@Param(): 参数装饰器
获取动态路由参数,可传参,指定当前restful URL的具体的参数
@Headers(): 参数装饰器
用于获取请求头,可以用req.headers代替
@Post('setHello')
setHello(@Request() req,@Body('name') body,@Headers() headers):string{
console.log(req.headers,'req.headers')
console.log(headers,'headers')
return 'post'
}
@HttpCode(): 函数装饰器
作用:控制接口返回的状态码
@Post('setHello')
@HttpCode(500)
setHello(@Request() req,@Body('name') body,@Headers() headers):string{
console.log(req.headers,'req.headers')
console.log(headers,'headers')
return 'post'
}
总结:
1. 装饰器能够提供编码的便捷,部分装饰器可以不用,Request和Response直接获取也没问题,装饰器主打一个方面
2. 学习装饰器前,最好先学习下装饰器的基本原理