首页 > 解决方案 > NestJS TypeORM 多个错误处理用户名和电子邮件冲突

问题描述

当我尝试更新用户名字段但此用户名已被占用时。以及我应该怎么做来处理我的用户名重复。

第二个问题是尝试更新电子邮件字段,但此电子邮件已被占用。我应该怎么做来处理我的电子邮件重复?

当用户更新他们的帐户用户名和电子邮件时,这两个文件以相同的形式提交。然后我抛出的特定字段已经被使用。我的问题是如何在同一个 catch 方法中处理这两种错误类型的情况

标签: try-catchnestjstypeorm

解决方案


首先,NestJs 自动捕获所有异常,因此无需在 Nest 应用程序中显式使用 try-catch 块,除非您调用第三方 API,您可以在此处阅读更多信息。所以,即使你不使用 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);
}

推荐阅读