首页 > 解决方案 > NestJS:在 POST 请求中将 @Param 和 body 值设置为 DTO

问题描述

我有一个 POST 请求条目,其中我指定一个“帐户”参数作为路径参数,并在正文中指定一个布尔值来设置验证状态,例如:

POST /users/authorized/USER_ACCOUNT1

身体会携带:

valid=1

我有以下控制器条目:

@ApiTags('users')
    @ApiOperation( { summary: 'Set user account status.  '} )
    @Post('authorized/:account')
    async setAuthStatus(params: SetUserAuthDto) {
        return this.userService.setUserAuthDto(params);
    }

如何将“帐户”和请求正文“状态”参数提供给同一个 DTO?我假设我不能在那里同时使用装饰器@Param 和@Body。我应该使用管道吗?

我是 NestJS 的新手,所以请原谅我的无知。

谢谢。

标签: apiparametersrequestnestjsdto

解决方案


@Params()同时使用和 并没有错@Body()。这实际上是一种常见的模式

@Post('authorized/:account')
async setAuthStatus(@Param('account') accountValue: string, @Body() body: SetUserAuthDto) {
  // do your thing here
}

但是,如果您想使用单个装饰器,您可以使用该createParamDecorator方法并让它返回req.paramsreq.body在一个合并的对象中,所以您可以这样做@ParamAndBody()


推荐阅读