• nestjs编程-nestjs装饰器


    Nestjs核心模块:

            @nestjs/core

            @nestjs/common:

        装饰器

            装饰器所在模块:'@nestjs/common';   

            常用装饰器:@Module() @Controller() @Injectable()  @Get() @Post() @Request() @Response()@Next() @Session()@Param()@Body()@Query()@Headers()@HttpCode()

            @Module(): 类装饰器

                    可传入一个对象类型的参数

    1. @Module({
    2. imports: [], // 依赖注入子模块
    3. controllers: [AppController], // 注入模块控制器
    4. providers: [AppService], // 注入模块的Service
    5. })
           @Controller(): 类装饰器

                    可传入字符串类型参数,对应请求的路由

    1. @Controller({
    2. path:'user',
    3. version:'1'
    4. })

            指定当前控制器的路由是'user' ,版本是1,使用的时候是localhost:3000/v1/user

           @Injectable():类装饰器

                    用于定义一个类可以被依赖注入(Dependency Injection,DI)。NestJS的DI容器会负责创建和管理该类,在需要该类的地方注入。

    1. export class AppController {
    2. constructor(private readonly appService: AppService) {}
    3. }

                   因为AppService类添加了@Injectable()依赖注入,DI容器会在这里注入。

          @Request(): 参数装饰器

                    作用是将参数变为Request对象,然后可以获取请求参数、请求头等信息

          @Query(): 参数装饰器 

                    作用是将参数变为请求url的query对象,然后可以获取请求参数。也可以用req.query代替。

    1. @Get()
    2. getHello(@Request() req,@Query() qs): string {
    3. console.log(qs,'qs')
    4. console.log(req.query,'req')
    5. return this.appService.getHello();
    6. }
             @Body('xxx'):参数装饰器 

                    主要作用将参数转变为Body对象,直接获取请求体的参数。

                    同样可以通过req.body来获取

                    通过传参可以直接获取body的属性

    1. @Post('setHello')
    2. setHello(@Request() req,@Body('name') body):string{
    3. console.log(body,'body')
    4. console.log(req.body,'req')
    5. return 'post'
    6. }
                 @Get()和 @Post(): 函数装饰器

                        根据Restful协议将控制器的函数映射为GeT或Post请求响应。

                         可传参数,将函数的url变为动态路由

    1. @Get('getHello/:id')
    2. getHello(@Request() req,@Query() qs,@Param('id') id): string {
    3. console.log(qs,'qs')
    4. console.log(req.query,'req')
    5. console.log(id,'id')
    6. return this.appService.getHello();
    7. }
                @Param(): 参数装饰器   

                            获取动态路由参数,可传参,指定当前restful URL的具体的参数

                 @Headers(): 参数装饰器 

                            用于获取请求头,可以用req.headers代替   

    1. @Post('setHello')
    2. setHello(@Request() req,@Body('name') body,@Headers() headers):string{
    3. console.log(req.headers,'req.headers')
    4. console.log(headers,'headers')
    5. return 'post'
    6. }
                  @HttpCode(): 函数装饰器

                       作用:控制接口返回的状态码

    1. @Post('setHello')
    2. @HttpCode(500)
    3. setHello(@Request() req,@Body('name') body,@Headers() headers):string{
    4. console.log(req.headers,'req.headers')
    5. console.log(headers,'headers')
    6. return 'post'
    7. }
      总结: 

           1. 装饰器能够提供编码的便捷,部分装饰器可以不用,Request和Response直接获取也没问题,装饰器主打一个方面

            2. 学习装饰器前,最好先学习下装饰器的基本原理

                    

  • 相关阅读:
    C++——多线程编程
    STM32 串口接收定长,不定长数据
    《剑指 Offer--LeetCode 学习计划》-- 字符串
    11.泛型
    Java反射获取内部类方法
    Exchange Office 365邮箱报表
    C++11:右值和右值引用
    Hystrix的监控平台
    ping github.com 显示 Request timeout for icmp_seq 0 问题
    linux 内存管理
  • 原文地址:https://blog.csdn.net/Mercuryyjs/article/details/140353662