@Get DTO 在 NestJs 中具有多个参数

Fed*_*are 9 nestjs

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

如何解决?

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

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

  @ApiModelProperty()
  readonly password: string;
}
Run Code Online (Sandbox Code Playgroud)

W.P*_*rin 14

在浏览器中

localhost:3001/Products/v1/user2
Run Code Online (Sandbox Code Playgroud)

像这样的控制器:

@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);
  }
}
Run Code Online (Sandbox Code Playgroud)


Jes*_*ter 6

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

尝试将您的签名更改为:

login(@Param('userName') userName: string, @Param('password') password: string)
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

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

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

{ number:11, name: thiago, age: 23 }
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法使这些参数之一成为可选的?例如:`@Get('/paramsTest3/:number/:name/:age?')` (2认同)