我尝试在DTO上使用类验证器来检查id是否有效。
这是我的控制器:
@Get(':id')
async find(@Param('id') { id }: IdDto) {
try {
return await this.userService.findOne(id);
} catch (error) {}
}
和我的Dto:
import { IsString, IsNotEmpty, IsMongoId } from 'class-validator';
import { Type, Transform } from 'class-transformer';
export class IdDto {
@IsMongoId()
id: string;
}
问题是当我尝试搜索有效用户时,例如:本地主机:3000用户/63ecf079c305ac977da87bcb
我得到这个错误:
{
"statusCode": 400,
"message": [
"id must be a mongodb id"
],
"error": "Bad Request"
}
我不知道为什么因为这是个有效的蒙戈身份证。
你能帮帮我吗?
此外,我想在我的服务中添加一个验证:
async findOne(id: string): Promise<IUser | null> {
const user = await this.userModel.findById(id).exec();
if (user === null) {
throw new NotFoundException('No user found for this id');
}
return user;
}
我想检查用户是否存在,如果我们寻找一个用户(有一个有效的id),但没有用户,我想抛出一个异常,并在我的控制器中捕获它。我怎么才能正确地做到这一点?谢谢大家:)
1条答案
按热度按时间vatpfxk51#
好吧,让我给你一个简短而明确的答案:
首先,更新您的控制器以使用带有白名单的验证管道:truevalidation pipe选项。它应该可以修复以下问题:
注意:这将自动删除非白名单属性(那些在验证类中没有任何装饰器的属性),请参阅:https://docs.nestjs.com/techniques/validation#stripping-properties
其次,此article有助于您决定在找不到用户时如何处理异常。