2023 年 6 月 22 日

Prisma Client 扩展现已可用于生产环境

随着 Prisma ORM 4.16.0 版本的发布,客户端扩展 (Client extensions) 现已正式可用(Generally Available)!这一新功能允许用户扩展和自定义 Prisma Client,以满足他们的个人用例需求。

Prisma Client Extensions

根据您的代码库需求定制 Prisma Client

4.7.0 版本中,我们将 Prisma Client 扩展作为一个预览功能发布。今天,我们很高兴地宣布 Prisma Client 扩展正式可用(General Availability)!在预览期间,扩展已被证明非常有用和强大,甚至为 AccelerateOptimize 等 Prisma 产品提供了支持!

一个直接且易于使用的 API

如果您是第一次听说客户端扩展,请不用担心。我们有一篇现有博文深入介绍了其用法。在此总结一下:创建扩展就像使用 $extends 一样简单。

这段代码片段展示了如何使用模型扩展model)为 User 模型添加一个新方法

如果您需要在所有模型上添加方法,甚至可以使用内置的 $allModels 功能

要更深入地了解本次发布中我们对扩展 API 所做的更改,请查看我们的发行说明

社区构建的扩展

虽然客户端扩展现已正式可用,但我们已经在实际应用中看到了一些很棒的示例。prisma-extension-pagination 是社区的一个很棒的贡献。导入和使用外部客户端扩展也很简单

各种用例的参考示例

除了社区贡献外,我们在 prisma-client-extensions 示例仓库中有一系列参考示例,展示了我们认为 Prisma Client 扩展可能有用处的不同领域。该仓库目前包含以下示例扩展

示例描述
audit-log-context提供当前用户的 ID 作为 Postgres 审计日志触发器的上下文
callback-free-itx添加一个方法来启动无需回调的交互式事务
computed-fields向结果对象添加虚拟/计算字段
input-transformation转换传递给 Prisma Client 查询的输入参数以过滤结果集
input-validation对传递给 mutation 方法的输入参数运行自定义验证逻辑
instance-methods向结果对象添加 Active Record 式方法,如 save()delete()
json-field-types使用强类型运行时解析存储在 JSON 列中的数据
model-filters添加可重用过滤器,可组合成模型复杂的 where 条件
obfuscated-fields防止敏感数据(例如密码字段)包含在结果中
query-logging用简单的查询计时和日志记录包装 Prisma Client 查询
readonly-client创建一个只允许读操作的客户端
retry-transactions为事务添加重试机制,带有指数退避和抖动
row-level-security使用 Postgres 行级安全策略来隔离多租户应用中的数据
static-methods向 Prisma Client 模型添加自定义查询方法
transformed-fields演示如何使用结果扩展转换查询结果并向应用添加 i18n
exists-fn演示如何向所有模型添加 exists 方法

展示您的扩展!

如果您想更深入地了解 Prisma Client 扩展,请务必查看我们之前的文章:Prisma Client 变得更加灵活:Prisma Client 扩展

我们也希望听到您关于扩展的分享(甚至可以尝试一下)。

请务必在我们的 Discord 中展示您的 #MadeWithPrisma 作品

不要错过下一篇文章!

订阅 Prisma 新闻简报