我正在使用 mongodb 作為我的資料庫創建一個帶有 nestjs 框架的應用程式。在我的 CRUD findOne 方法中,我想驗證發送的 ID 是 Mongo ObjectID,如果不是,則回傳 400(默認情況下,如果讓它流過,則回傳 500)。我可以手動檢查這是,但是有沒有辦法注釋引數以使此驗證自動進行?
@Get(':id')
findOne(@Param('id') id: string) {
return this.usersService.findOne(id);
}
uj5u.com熱心網友回復:
您可以使用類驗證器和轉換,如下所示:
控制器:
@Get(':id')
findOne(@Param() params: OnlyIDParamDTO) {
return this.usersService.findOne(params.id);
}
DTO:
export class OnlyIDParamDTO {
@ApiProperty({
description: 'Id',
required: true,
type: String,
default: '61d9cfbf17ed7311c4b3e485',
})
@IsMongoId()
@IsString()
@Transform((value) => SafeMongoIdTransform(value))
id: string;
}
變換:
export const SafeMongoIdTransform = ({ value }) => {
try {
if (
Types.ObjectId.isValid(value) &&
new Types.ObjectId(value).toString() === value
) {
return value;
}
throw new BadRequestException('Id validation fail');
} catch (error) {
throw new BadRequestException('Id validation fail');
}
};
您可以在此處閱讀更多資訊:https ://docs.nestjs.com/pipes#object-schema-validation
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/449266.html
