【问题标题】:@Get DTO with multiple parameters in NestJs在 NestJs 中 @Get 具有多个参数的 DTO
【发布时间】:2019-04-24 15:13:31
【问题描述】:

我正在尝试在 NestJS 中创建一个控制器操作,该操作可通过 GET HTTP 请求访问,该请求接收两个参数,但由于某种原因它们未定义。

如何解决?

@Get('/login')
login(@Param() params: LoginUserDto) {
  console.log(params)
  return 'OK'
}
import { ApiModelProperty } from '@nestjs/swagger';

export class LoginUserDto {
  @ApiModelProperty()
  readonly userName: string;

  @ApiModelProperty()
  readonly password: string;
}

【问题讨论】:

    标签: nestjs


    【解决方案1】:

    在浏览器中

    localhost:3001/Products/v1/user2
    

    这样的控制器:

    @Controller('Products')
    export class CrashesController {
      constructor(private readonly crashesService: CrashesService) { }
    
      @Get('/:version/:user')
      async findVersionUser(@Param('version') version: string, @Param('user') user: string): Promise<Crash[]> {
        return this.crashesService.findVersionUser(version, user);
      }
    }
    

    【讨论】:

      【解决方案2】:

      Nest 不支持以这种方式将Get 查询参数自动转换为对象的功能。预计您将通过将参数名称传递给 @Param 装饰器来单独提取参数。

      尝试将您的签名更改为:

      login(@Param('userName') userName: string, @Param('password') password: string)
      

      如果您想接收一个对象,请考虑改用Post 并在请求正文中传递该对象(无论如何,这对我来说对登录操作更有意义)。

      【讨论】:

        【解决方案3】:

        现在我在 7.0.0 上使用 nestJs,如果你这样做:

        @Get('/paramsTest3/:number/:name/:age')
          getIdTest3(@Param() params:number): string{
            console.log(params);
            return this.appService.getMultipleParams(params);
          }
        

        console.log(params) 结果将是(这些值只是示例):

        { number:11, name: thiago, age: 23 }
        

        我希望在那段时间之后我在某种程度上对你有所帮助!

        【讨论】:

        • 有没有办法让这些参数之一成为可选参数?例如:@Get('/paramsTest3/:number/:name/:age?')
        • @MichaelLRhyndress 如果你想这样做,我会使用 JSON 正文
        【解决方案4】:

        假设您需要传递一个名为id的必填参数,您可以通过header params发送它,您的可选参数可以通过query params发送;

         @Get('/:id')
          findAll(
            @Param('id') patientId: string,
            @Query() filter: string,
          ): string {
            console.log(id);
            console.log(filter);
        
            return 'Get all samples';
          }
        

        【讨论】:

          猜你喜欢
          • 2021-09-07
          • 2019-06-02
          • 1970-01-01
          • 2021-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-28
          • 1970-01-01
          相关资源
          最近更新 更多