【发布时间】:2021-07-26 23:10:34
【问题描述】:
我正在使用class-validator 和NestJS,我面临以下情况:基本上我已经定义了一个具有以下结构的Dto 文件:
import {
IsNotEmpty,
IsEmail,
IsDate,
MaxDate,
MinLength,
MaxLength,
Matches,
IsString,
} from 'class-validator'
import { Type } from 'class-transformer'
export class CreateUserDto {
@MinLength(5)
@MaxLength(10)
username: string
@IsNotEmpty()
@IsEmail()
email: string
@IsString()
@MinLength(4)
@MaxLength(20)
@Matches(/((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/, {
message: 'password too weak',
})
password: string
@IsNotEmpty()
@IsDate()
@Type(() => Date)
@MaxDate(require('moment')().subtract(13, 'y').toDate())
dateOfBirth: Date
@IsNotEmpty()
firstName: string
@IsNotEmpty()
lastName: string
}
所以当我调用auth/register 时,class-validator 会自动检查POST 并验证所有字段,并在出现异常时返回:
{
error: 'Bad Request',
message: ['password too weak']
statusCode: 400
}
这很好,但如果我使用 NestJS 生成自定义异常:
let exists = await this.userService.findByEmail(createUserDto.email)
if (exists) throw new ConflictException('email already exists')
我明白了:
{
error: 'Bad Request',
message: 'email already exists'
statusCode: 400
}
如您所见,message 不是数组,而且这种缺乏一致性。要解决这种情况,我必须用['email already exists'] 包围消息。
这是一个好方法还是我把事情复杂化了?
【问题讨论】: