@ Получить DTO с несколькими параметрами в NestJs

Я пытаюсь создать действие контроллера в NestJS, доступное через HTTP-запрос GET, который получает два параметра, но по какой-то причине они не определены.

Как это исправить?

@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;
}

person Federico Fia Sare    schedule 22.11.2018    source источник


Ответы (4)


В браузере

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);
  }
}
person W.Perrin    schedule 26.07.2019

Nest не поддерживает возможность автоматического преобразования Get параметров запроса в объект таким способом. Ожидается, что вы извлечете параметры по отдельности, передав имя параметра декоратору @Param.

Попробуйте изменить свою подпись на:

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

Если вы хотите получить объект, вместо этого рассмотрите возможность перехода на использование Post и передачи объекта в теле запроса (что в любом случае имеет для меня больше смысла для действия входа в систему).

person Jesse Carter    schedule 22.11.2018

Прямо сейчас я использую nestJs на 7.0.0, и если вы сделаете это:

@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 }

Я надеюсь, что за все это время я был вам чем-то полезен!

person Thiago Dantas    schedule 04.10.2020
comment
Можно ли сделать один из этих параметров необязательным? Например: @Get('/paramsTest3/:number/:name/:age?') - person Michael L Rhyndress; 11.10.2020
comment
@MichaelLRhyndress Я бы использовал тело JSON, если вы хотите это сделать - person MADforFUNandHappy; 10.12.2020

Допустим, вам нужно передать один обязательный параметр с именем 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';
  }
person Gimnath    schedule 25.04.2021