gpt4 book ai didi

nestjs - 如何在一个 DTO 中编写@Param 和@Body

转载 作者:行者123 更新时间:2023-12-02 16:27:07 25 4
gpt4 key购买 nike

我正在使用 nestjs,我努力使用 DTO,然后像这样生成 update-todo.dto.ts。

如何在一个 DTO 中同时使用@Param 和@Body?

@Param('id') id: string,
@Body('status') status: TodoStatus

那么如何转换我的代码呢?

import { TodoStatus } from '../todo.model';
export class UpdateTodoDto {
id: string;
status: TodoStatus;
}
  @Patch('/:id/status')
updateTodoStatus(
@Param('id') id: string,
@Body('status') status: TodoStatus
// convert this line
): Todo {
return this.todosService.updateTodoStatus(id, status);
}

最佳答案

您需要四个组件协同工作。

  1. 一个自定义装饰器,用于组合 @Param()@Body() 装饰器
  2. 一个 DTO 来保持 @Param() DTO 的形状
  3. 一个 DTO 来保持 @Body() DTO 的形状
  4. 将正文和参数 DTO 组合在一起的 DTO

This repository通过一个基于查询参数的可选主体的示例。

1

export const BodyAndParam = createParamDecorator((data: unknwon, ctx: ExecutionContext) => {
const req = ctx.switchToHttp().getRequest();
return { body: req.body, params: req.params };
});

2

export class ParamsDTO {

@IsString()
id: string;
}

3

export class BodyDTO {
@IsString()
hello: string;
}

4

export class MixedDTO {
@Type(() => ParamsDTO)
params: ParamsDTO;

@Type(() => BodyDTO);
body: BodyDTO;
}

使用

@Controller()
export class FooController {
@Post()
bar(@BodyAndParam() bodyAndParam: MixedDTO) {
// do stuff here
}
}

关于nestjs - 如何在一个 DTO 中编写@Param 和@Body,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64230342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com