在Nest.js中,我试图为我的膳食计划应用程序中的一种配料编写一个创建(Post)路径。该路径将作为请求主体,包含一个描述(可选)和一个名称(强制),以及一个可选的图像。我将Objection.js用作一个ORM。
我阅读了Nest.js文档中的File Uploading Nest.js File Upload handling with Multer,并尝试按照文档中的方法进行操作。问题是,我找不到任何地方如何在使文件可选的同时使用UploadedFile装饰器。当我尝试通过Postman创建一个没有图像的新成分时,我收到了以下错误消息:
{
"statusCode": 400,
"message": "File is required",
"error": "Bad Request"
}
有没有人在这里偶然发现这个问题,并找到了一个解决方案,使参数可选?我知道我可以创建一个补丁路径来修改成分,并添加一个图像后,作为一个变通方案,但我想知道是否有什么我可以做的,同时保持实际的。
这是我的控制器的代码:
@Post()
@UseInterceptors(
FileInterceptor('image', {
storage: diskStorage({
destination: './assets/images/ingredient',
filename: getUniqueFileName,
}),
}),
)
@UseFilters(DeleteFileOnErrorFilter)
async create(
@Body() dto: CreateIngredientDto,
@UploadedFile(
new ParseFilePipe({
validators: [new FileTypeValidator({ fileType: '.(png|jpeg|jpg)' })],
}),
)
image?: Express.Multer.File,
): Promise<IngredientModel> {
return this.ingredientService.create(dto, image);
}
以及从服务调用的create方法:
async create(
dto: CreateIngredientDto,
image?: Express.Multer.File,
): Promise<IngredientModel> {
try {
return await ImageModel.transaction(async () => {
if (image) {
const imagePath = await ImageModel.query().insert({
location: image.path,
});
return this.modelClass
.query()
.insert({ ...dto, imageId: imagePath.id });
}
return this.modelClass.query().insert({ ...dto });
});
} catch (err) {
this.logger.error('An error occurred while creating the ingredient');
return null;
}
}
1条答案
按热度按时间nbnkbykc1#
您可以将
fileIsRequired
作为false
传递给ParseFilePipe
类。