额外
错误处理

错误处理

执行查询产生的错误可能令人困惑,包含非常具体的 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")
}