我正在使用 nestjs 并且我努力使用 DTO 并生成这样的 update-todo.dto.ts。
如何在一个 DTO 中同时使用 @Param 和 @Body?
@Param('id') id: string,
@Body('status') status: TodoStatus
Run Code Online (Sandbox Code Playgroud)
那么如何转换我的代码?
import { TodoStatus } from '../todo.model';
export class UpdateTodoDto {
id: string;
status: TodoStatus;
}
Run Code Online (Sandbox Code Playgroud)
@Patch('/:id/status')
updateTodoStatus(
@Param('id') id: string,
@Body('status') status: TodoStatus
// convert this line
): Todo {
return this.todosService.updateTodoStatus(id, status);
}
Run Code Online (Sandbox Code Playgroud)
您需要四个组件才能协同工作。
@Param()和@Body()装饰器@Param()DTO@Body()DTO这个存储库通过一个基于查询参数的可选主体的示例。
export const BodyAndParam = createParamDecorator((data: unknwon, ctx: ExecutionContext) => {
const req = ctx.switchToHttp().getRequest();
return { body: req.body, params: req.params };
});
Run Code Online (Sandbox Code Playgroud)
export class ParamsDTO {
@IsString()
id: string;
}
Run Code Online (Sandbox Code Playgroud)
export class BodyDTO {
@IsString()
hello: string;
}
Run Code Online (Sandbox Code Playgroud)
export class MixedDTO {
@Type(() => ParamsDTO)
params: ParamsDTO;
@Type(() => BodyDTO);
body: BodyDTO;
}
Run Code Online (Sandbox Code Playgroud)
@Controller()
export class FooController {
@Post()
bar(@BodyAndParam() bodyAndParam: MixedDTO) {
// do stuff here
}
}
Run Code Online (Sandbox Code Playgroud)