Prisma SELECT类方法无匹配行时的返回类型咨询
Prisma查询/更新方法未找到匹配数据时的返回值说明
核心结论
findUnique()/findFirst():未找到符合where条件的数据时,返回**null**update()/delete()(单条操作):未找到匹配行时,直接抛出PrismaClientKnownRequestError错误(错误码为P2025)updateMany()/deleteMany()(批量操作):未找到匹配行时,返回包含count: 0的结果对象,不会抛出错误
针对你的代码说明
你的代码中,findUnique()返回null时通过!readRefreshToken判断是有效的,因为null属于假值。另外,TypeScript类型层面,findUnique()的返回类型是Promise<RefreshToken | null>,而你的函数声明返回Promise<RefreshToken>——由于你在!readRefreshToken分支抛出了错误,TS会自动推断后续返回的readRefreshToken为非空类型,这部分逻辑是安全的。
可以优化错误信息的拼接写法,让代码更简洁:
export const readByUser_id = async ( user_id: number ): Promise<RefreshToken> => { const readRefreshToken = await prisma.refreshToken.findUnique({ where: { user_id } }); if (!readRefreshToken) throw new Error(`User with user_id: ${user_id} was not found.`); return readRefreshToken; };
补充提示
- 所有单条查询类方法(如
findUnique、findFirst)未找到数据时,均返回null而非undefined,不会抛出错误 - 使用
update()/delete()这类单条操作方法时,建议用try/catch捕获P2025错误,避免程序崩溃 - 批量操作方法始终返回结果对象,可通过
count字段判断是否有数据被修改/删除
内容的提问来源于stack exchange,提问作者Valentin
相关产品推荐
相关产品推荐

