NestJS TypeORM 多个错误处理用户名和电子邮件冲突

问题描述 投票:0回答:1

我们应该如何处理 TypeORM + Nest 服务器中的多个重复字段?

特别是 TypeORM 实体中的用户名和/或电子邮件字段重复约束?

最好在同一个 try/catch 方法或错误处理程序中处理这些字段的重复。

try-catch nestjs typeorm
1个回答
1
投票

首先,NestJs 会自动捕获所有异常,因此无需在 Nest 应用程序内显式使用 try-catch 块,除非您调用第三方 API,您可以在here阅读更多相关信息。因此,即使不使用 try catch 块嵌套也会捕获数据库抛出的所有异常。

第二,这仍然是一个不好的做法,因为最好处理您期望数据库抛出错误的所有情况。因为,在这里您知道如果插入重复数据,数据库将抛出错误,然后在数据到达数据库之前处理这些情况。我的意思是:

  • 在插入之前检查该数据是否已存在于数据库中。
  • 如果它已经存在,则返回错误请求异常。
  • 如果没有,则插入数据。

示例:创建新的用户 API。

async createUser(createUserDto: CreateUserDto): Promise<CreateUserRO> {
    const { phone } = createUserDto;
    const existingUser = await this.userRepository.findOne({
      phone,
    });

    if (existingUser) {
      throw new HttpException(
        'Phone number already exists',
        HttpStatus.BAD_REQUEST,
      );
    }

    const user = new User(createUserDto);
    await this.userRepository.persistAndFlush(user);

    return new CreateUserRO(true, user.id);
}
© www.soinside.com 2019 - 2024. All rights reserved.