【发布时间】:2021-07-25 22:33:17
【问题描述】:
我正在尝试验证 excel 文件(从正文请求传递的文件)中的数据类型和约束,但我做不到!我正在阅读有关类验证器的信息,但我认为这对我不起作用,因为我没有收到 json 数据,只是从请求正文作为文件传递的 excel 文件。我编写了一个服务,我在其中放置了读取整个文件的逻辑并添加到一个数组中(作为我的数据 dto)。有什么方法可以验证此时的每个字段并在检测到问题时返回?谢谢:)
文件控制器:
@Controller('file-parser')
export class FileParserController {
constructor(private readonly fileParserService: FileParserService) {}
@Post('upload')
@UseInterceptors(FileInterceptor('file'))
UploadExcelFile(@UploadedFile() file: Express.Multer.File) {
return this.fileParserService.processFile(file);
}
}
文件服务:
processFile(file: Express.Multer.File): void {
const workBook: XLSX.WorkBook = XLSX.read(file.buffer, {
type: 'buffer',
cellDates: true,
cellNF: false,
});
const sheetName = workBook?.SheetNames[0]; // asigne first sheet name of file
const sheet: XLSX.WorkSheet = workBook.Sheets[sheetName]; // entire sheet information asigned to sheet variable
const jsonData: StudentDTO[] = XLSX.utils.sheet_to_json(sheet, {
dateNF: 'YYYY-MM-DD',
});
// Add fields validation here
console.log(jsonData);
}
学生 DTO:
import { IsNotEmpty, IsNumber, IsOptional, IsString, MaxLength } from 'class-validator';
export class StudentDTO {
id: number;
@IsString()
@IsNotEmpty()
@MaxLength(25)
studentCode: string;
@IsString()
@IsNotEmpty()
@MaxLength(50)
studentName: string;
@IsString()
@IsNotEmpty()
@MaxLength(50)
studentLastname: string;
}
【问题讨论】: