错误处理
执行查询产生的错误可能令人困惑,包含非常具体的 Prisma 类型。因此,提供了一些实用程序和说明。
查询错误类似于以下内容
pub enum Error {
Execute(user_facing_errors::Error),
Serialize(serde_json::Error),
Deserialize(serde_json::Error)
}
序列化
和 反序列化
错误相当容易理解,并且在将从 Prisma 返回的数据转换为其相应的结构体时发生。 serde 文档 (在新标签页中打开) 可以帮助处理 serde 错误。
执行
错误发生在将查询发送到 Prisma 引擎、执行查询并接收结果时。它们包含的数据是由 Prisma 提供的错误类型,其中包含许多嵌套很深且可能无用的有关发生的特定错误的数据。
为了很好地处理此错误类型,查询错误具有一个 is_prisma_error
函数来检查错误是否为特定的 UserFacingError
。
示例
此示例尝试创建记录并检查是否违反了唯一键约束。
use prisma_client_rust::prisma_errors::query_engine::UniqueKeyViolation;
let user = client
.user()
.create(..)
.exec()
.await;
match user {
Ok(user) => println!("User created"),
Err(error) if error.is_prisma_error::<UniqueKeyViolation>() =>
println!("Unique key violated")
Err(error) => println!("Other error occurred")
}
此示例尝试更新记录并检查要更新的记录是否存在。
use prisma_client_rust::prisma_errors::query_engine::RecordNotFound;
let user = client
.user()
.update(..)
.exec()
.await;
match user {
Ok(user) => println!("User updated"),
Err(error) if error.is_prisma_error::<RecordNotFound>() =>
println!("User doesn't exist")
Err(error) => println!("Other error occurred")
}