try-catch - NestJS TypeORM 多个错误处理用户名和电子邮件冲突
问题描述
当我尝试更新用户名字段但此用户名已被占用时。以及我应该怎么做来处理我的用户名重复。
第二个问题是尝试更新电子邮件字段,但此电子邮件已被占用。我应该怎么做来处理我的电子邮件重复?
当用户更新他们的帐户用户名和电子邮件时,这两个文件以相同的形式提交。然后我抛出的特定字段已经被使用。我的问题是如何在同一个 catch 方法中处理这两种错误类型的情况
解决方案
首先,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);
}
推荐阅读
- python-xarray - xarray apply_ufunc 获取每个变量的最小值和最大值
- c# - WPF DataGrid 禁用基于值的单元格编辑
- typescript - 使用默认实现影响返回类型的通用函数参数
- ios - 与声音一起播放时,与背景声音录制音频不同步
- oracle - 使用 Execute Immediate 和绑定的存储过程
- neo4j - 将变量值持久化到密码查询的其他部分
- sql - 连接以创建唯一 ID 并签入另一个表
- html - 联系表格未发送?
- python - Sqlite3 内存多线程问题 - 阻塞线程立即失败
- javascript - JavaScript 词法环境作为对象