news 2026/5/24 10:12:16

Nest.js与Drizzle ORM的优雅结合

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nest.js与Drizzle ORM的优雅结合

在Nest.js框架中使用Drizzle ORM时,很多开发者可能已经习惯了Prisma的使用方式,但Drizzle ORM的集成似乎不如Prisma那样直观。本文将探讨如何在Nest.js中更优雅地使用Drizzle ORM,提供一种类似于PrismaService的使用体验。

背景介绍

Drizzle ORM是PostgreSQL的一个轻量级ORM,旨在提供简洁的SQL查询构建和类型安全的数据库操作。与Prisma不同,Drizzle ORM的集成通常需要通过Nest.js的providers来完成,这可能看起来不那么直观。

传统的Drizzle ORM集成

通常,我们会通过以下方式在Nest.js中集成Drizzle ORM:

import{Module}from'@nestjs/common';import{ConfigService}from'@nestjs/config';import{drizzle}from'drizzle-orm/postgres-js';importpostgresfrom'postgres';import*asschemafrom'./schema';exportconstPG_CONNECTION="PG_CONNECTION";@Module({providers:[{provide:PG_CONNECTION,inject:[ConfigService],useFactory:async(config:ConfigService)=>{constconnection=postgres(config.get("DATABASE_URL"));returndrizzle(connection,{schema});},},],exports:[PG_CONNECTION],})exportclassDrizzleModule{}

然后,在服务中注入这个连接:

import{Inject,Injectable}from'@nestjs/common';import{PG_CONNECTION}from'../drizzle/drizzle.module';import{dbType}from'drizzle-orm/postgres-js';import*asschemafrom'../drizzle/schema';@Injectable()exportclassUsersService{constructor(@Inject(PG_CONNECTION)privatedrizzle:dbType<typeofschema>){}asyncfindAll(){returnawaitthis.drizzle.query.users.findMany();}}

这种方式虽然有效,但每次需要注入PG_CONNECTION并导入类型和常量,这显得有点繁琐。

优雅的集成方式

为了实现类似于Prisma的简洁体验,我们可以创建一个DrizzleService来封装这个连接:

@Injectable()exportclassDrizzleService{constructor(@Inject(PG_CONNECTION)readonlydb:dbType<typeofschema>){}}

然后在DrizzleModule中导出这个服务:

@Module({providers:[DrizzleService],exports:[DrizzleService],})exportclassDrizzleModule{}

这样,在其他服务中,我们可以这样注入和使用Drizzle ORM:

import{Inject,Injectable}from'@nestjs/common';import{DrizzleService}from'../drizzle/drizzle.service';@Injectable()exportclassUsersService{constructor(privatereadonlydrizzle:DrizzleService){}asyncfindAll(){returnawaitthis.drizzle.db.query.users.findMany();}}

实例解析

假设我们有一个用户数据库表,我们可以通过UsersService来查询用户数据:

asyncfindUserById(id:number){constuser=awaitthis.drizzle.db.query.users.findFirst({where:(users,{eq})=>eq(users.id,id),});returnuser;}

这种方式不仅使代码更加简洁,也更符合Nest.js的设计哲学,即通过服务注入来管理依赖。

总结

通过创建一个DrizzleService来封装Drizzle ORM的连接,我们可以在Nest.js项目中更优雅地使用Drizzle ORM。这样的设计不仅使代码结构更加清晰,也降低了使用复杂度,让开发者能够更加专注于业务逻辑的实现,而不必过多考虑数据库连接的细节。希望这种方法能帮助更多开发者在Nest.js项目中高效地使用Drizzle ORM。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 21:16:11

外卖骑手路径规划:HunyuanOCR识别小区楼栋编号

外卖骑手路径规划&#xff1a;HunyuanOCR识别小区楼栋编号 在城市楼宇林立的居民区里&#xff0c;一位外卖骑手正站在小区门口皱眉四顾。手机导航显示“已到达目的地”&#xff0c;可他却不知道该往哪走——订单地址写着“3栋2单元”&#xff0c;但眼前十几栋楼外观几乎一模一样…

作者头像 李华
网站建设 2026/5/23 19:13:36

Front邮件统一收件箱:HunyuanOCR识别附件发票进行分类路由

Front邮件统一收件箱&#xff1a;HunyuanOCR识别附件发票进行分类路由 在企业日常运营中&#xff0c;财务人员每天打开邮箱时常常面对数十甚至上百封带有附件的邮件——供应商发来的PDF发票、扫描件、拍照截图混杂其中&#xff0c;语言不一、格式各异。过去&#xff0c;这些文件…

作者头像 李华
网站建设 2026/5/20 19:55:59

电路仿真软件用于电力电子热损耗分析:实战案例

电路仿真如何“算”出功率器件会不会烧&#xff1f;——三相逆变器热损耗实战分析你有没有遇到过这样的情况&#xff1a;样机刚上电跑了几分钟&#xff0c;IGBT模块就烫得不敢碰&#xff1f;或者电机负载一加重&#xff0c;温升曲线蹭蹭往上冲&#xff0c;最后不得不换更大散热…

作者头像 李华
网站建设 2026/5/23 4:41:33

手把手教你识别ESP32-WROOM-32可用引脚

手把手教你识别ESP32-WROOM-32可用引脚&#xff1a;避开“坑”才能稳运行在嵌入式开发的世界里&#xff0c;ESP32已经成为无数工程师和爱好者的首选。尤其是ESP32-WROOM-32这款经典模块&#xff0c;凭借双核处理器、Wi-Fi 蓝牙双模通信、丰富的外设接口以及极高的性价比&#…

作者头像 李华
网站建设 2026/5/23 8:50:38

单一指令完成OCR全流程?HunyuanOCR真正实现端到端推理

单一指令完成OCR全流程&#xff1f;HunyuanOCR真正实现端到端推理 在文档扫描、票据录入、跨境商品标签识别这些日常场景中&#xff0c;你是否曾为“先检测文字位置、再调用识别模型、最后写规则提取字段”这一套繁琐流程感到疲惫&#xff1f;传统OCR系统就像一条由多个工人串联…

作者头像 李华
网站建设 2026/5/23 5:23:29

支持Latex公式识别?腾讯HunyuanOCR在学术文档处理中的潜力

腾讯HunyuanOCR如何重塑学术文档处理&#xff1f;从公式识别到端到端智能解析 在科研人员与研究生们翻阅PDF论文的日常中&#xff0c;一个隐秘却高频的痛点始终存在&#xff1a;那些密布于页边与正文之间的数学公式&#xff0c;一旦需要复用或修改&#xff0c;几乎只能手动重写…

作者头像 李华