我正在尝试在 Nestjs 中使用 DTO 验证对象数组。我已经尝试过,但数据未得到验证。我尝试搜索很多但没有得到任何答案。这些是我的文件:
trivia.controller.ts 文件
import { Controller, Post, Body, ParseArrayPipe } from '@nestjs/common';
import { LoggerService } from '../logger/logger.service';
import { TriviaService } from './trivia.service';
import { PostTriviaScoreDto } from './dto/post-trivia-score.dto';
@Controller('trivia')
export class TriviaController {
constructor(private readonly logger: LoggerService, private readonly triviaService: TriviaService) {}
@Post('score')
postTriviaScore(@Body(new ParseArrayPipe({ items: PostTriviaScoreDto })) postTriviaScoreDto: PostTriviaScoreDto) {
this.logger.info('Trivia Controller : postTriviaScore : start');
return this.triviaService.postTriviaScore(postTriviaScoreParamsDto, postTriviaScoreDto);
}
}
Run Code Online (Sandbox Code Playgroud)
trivia.service.ts 文件
import { LoggerService } from '../logger/logger.service';
import { PostTriviaScoreDto } …Run Code Online (Sandbox Code Playgroud) 在我的 API 中考虑这个端点:
@Post('/convert')
@UseInterceptors(FileInterceptor('image'))
convert(
@UploadedFile() image: any,
@Body(
new ValidationPipe({
validationError: {
target: false,
},
// this is set to true so the validator will return a class-based payload
transform: true,
// this is set because the validator needs a tranformed payload into a class-based
// object, otherwise nothing will be validated
transformOptions: { enableImplicitConversion: true },
}),
)
parameters: Parameters,
) {
return this.converterService.start(image, parameters);
}
Run Code Online (Sandbox Code Playgroud)
设置为parameters参数的请求正文包含一个称为laserMode布尔类型的属性,它在参数 DTO上进行验证:
@IsDefined()
@IsBoolean()
public …Run Code Online (Sandbox Code Playgroud)