【问题标题】:How to use Get request with DTO in NestJs?如何在 NestJs 中使用 Get 请求和 DTO?
【发布时间】:2022-02-09 06:04:57
【问题描述】:

我正在尝试编写一个函数来处理 Get 请求,这是我的代码:

  @Get('/find')
  async find(@Param() testname: NameDto) {
    console.log(testname.name);
  }

这是我的 dto:

export class NameDto {
  @IsString()
  @ApiProperty({ required: true })
  name: string;
}

我正在使用 Swagger 来测试这个 API: 当我输入一个信号 a 时,我得到了以下响应:

{
  "statusCode": 400,
  "message": [
    "name must be a string"
  ],
  "error": "Bad Request"
}

这里有更多输入示例:

它们都返回相同的响应。

然后,我用@Query 改变这样的查找功能:

  @Get('/find')
  async find(@Query() testname: NameDto) {
    console.log(testname.name);
  }

这是我的输入: 我可以得到 200-ok 响应。 这是另一个例子: 我输入 1 作为输入,我仍然可以得到 200 响应。 dto 未按预期工作。

我错过了什么吗? 任何帮助将不胜感激。

【问题讨论】:

    标签: node.js get swagger nestjs dto


    【解决方案1】:

    您正在为 url 使用查询参数,因此您确实需要使用 @Query()。查询参数将始终以字符串形式出现,因为这就是 express 和 fastify 的工作方式。您可以在ValidationPipe 的选项中启用transform: true{transformOptions: { enableImplicitConverion: true } } 并让数字显示为实际数字。

    【讨论】:

    • 嗨 Jay,我将代码更改为:@Get('/find') @UsePipes(new ValidationPipe({ transform: true, transformOptions: { enableImplicitConversion: true }, }), ) async find(@Query() testname: NameDto) { console.log(testname.name); dto 还是不行,enter a 和 1 没有区别
    【解决方案2】:

    您在参数中没有发送任何内容
    你可以阅读Nestjs document
    试试这个:

    @Get('/find/:testname')
      async find(@Param('testname') testname: NameDto) {
        console.log(testname.name);
      }

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2021-06-01
      • 1970-01-01
      • 2019-11-12
      • 2021-09-15
      • 2018-08-25
      • 2021-06-12
      • 2021-05-30
      • 2019-04-24
      相关资源
      最近更新 更多