当前位置: 首页 > article >正文

Next.js + Drizzle ORM 全流程终极指南

目录️ 全局架构逻辑图 (新增)前置准备依赖安装核心配置drizzle.config.ts (必填项检查)环境与安全.env 与 .gitignoreTypeScript 增强tsconfig.json 路径别名定义模型db/schema.ts (类型生成的源头)✨ 核心实战类型推导与数据插入 (含流程图)完整工作流验证常见问题与避坑指南1. ️ 全局架构 (新增)在写代码之前我们先看一张图理解Drizzle ORM是如何连接代码、配置和数据库的。 图解关键点左侧 (定义层)schema.ts是唯一的真理来源Single Source of Truth。它不仅定义表还通过$inferInsert自动生成了NewUser类型。中间 (配置层)drizzle.config.ts负责桥接它读取.env找到数据库并告诉工具去哪里找schema.ts。右侧 (执行层)CLI 工具根据配置生成 SQL 并更新数据库而你的业务代码则利用生成的NewUser类型确保传给数据库的数据是安全的。2. 前置准备依赖安装确保安装了运行时库、开发工具库以及类型定义。# 1. 核心运行时库npminstalldrizzle-orm postgres# 2. 开发工具库 (生成迁移用)npminstall-Ddrizzle-kit dotenv# 3. TypeScript 类型定义npminstall-Dtypes/node3. 核心配置drizzle.config.ts (必填项检查)此文件位于项目根目录。必须包含dotenv加载和环境变量校验。import{defineConfig}fromdrizzle-kit;import*asdotenvfromdotenv;// 【必填】加载 .envdotenv.config({path:.env});if(!process.env.DATABASE_URL){thrownewError(❌ 错误: .env 中缺少 DATABASE_URL);}exportdefaultdefineConfig({dialect:postgresql,dbCredentials:{url:process.env.DATABASE_URL!,// 非空断言},schema:./db/schema.ts,// ⚠️ 必须对应实际路径out:./drizzle,// 迁移文件输出目录verbose:true,strict:true,});4. 环境与安全.env 与 .gitignore.env文件DATABASE_URLpostgresql://postgres:你的密码localhost:5432/my_nextjs_db?schemapublic.gitignore文件确保包含.env .node_modules .next5. TypeScript 增强tsconfig.json 路径别名为了让导入更优雅如/db/schema配置paths。{compilerOptions:{baseUrl:.,paths:{/*:[./*],/db:[./db],/db/*:[./db/*]}}}6. 定义模型db/schema.ts (类型生成的源头)这是所有 TypeScript 类型的来源。文件路径:db/schema.tsimport{pgTable,text,serial,timestamp}fromdrizzle-orm/pg-core;exportconstuserspgTable(users,{id:serial(id).primaryKey(),// 自增主键name:text(name).notNull(),// 必填email:text(email).unique(),// 唯一createdAt:timestamp(created_at).defaultNow(),// 默认当前时间});// 显式导出类型// 1. 查询返回的类型 (全量字段)exporttypeUsertypeofusers.$inferSelect;// 2. 插入数据的类型 (自动排除自增和默认值字段)exporttypeNewUsertypeofusers.$inferInsert;7. ✨ 核心实战类型推导与数据插入 (含流程图)这一步展示了NewUser类型如何在代码中发挥作用。 类型推导微观流程PostgreSQL你的业务代码 (API)TypeScript 编译器db/schema.tsPostgreSQL你的业务代码 (API)TypeScript 编译器db/schema.ts推断结果:id? (可选)name (必填)email? (可选)createdAt? (可选)定义 id (serial), name (notNull), createdAt (default)运行 $inferInsert 推断逻辑const user: NewUser { ... }✅ 检查通过 (若只传 name, email)❌ 报错 (若漏传 name 或 多传 id)db.insert(users).values(user)成功写入 (id 和 createdAt 由数据库生成) 代码实战创建一个测试文件例如test-insert.tsimport{typeNewUser}from/db/schema;// ✅ 正确示范只需关注业务必填字段constnewUser:NewUser{name:Alice,email:aliceexample.com,// TS 智能提示id 和 createdAt 不需要传因为它们有默认值/自增};// ❌ 错误示范 1漏传必填字段 (TS 会红线报错)// const badUser1: NewUser { email: bobexample.com };// 报错信息: Property name is missing...// ❌ 错误示范 2传了不该传的字段 (TS 会红线报错)// const badUser2: NewUser { ..., id: 123 };// 报错信息: Object literal may only specify known properties, and id does not exist...console.log(✅ 类型检查通过数据准备就绪:,newUser);// --- 实际插入逻辑 ---// import { db } from /db;// import { users } from /db/schema;// await db.insert(users).values(newUser); 为什么这很重要编译期拦截在代码运行前TypeScript 就已经帮你挡掉了 90% 的数据库字段错误。智能提示输入newUser.时IDE 只会显示name和email界面清爽不再被id、updatedAt等系统字段干扰。重构友好如果数据库改了比如email变为必填所有使用该类型的地方都会立即报错提示你修改。8. 完整工作流验证结合图表逻辑跑通全流程生成迁移(读取 Config Schema - 生成 SQL):npx drizzle-kit generate执行迁移(执行 SQL - 更新 DB):npx drizzle-kit migrate类型检查(验证代码是否符合 Schema 类型):npx tsc--noEmit✅ 无报错 类型安全通关运行测试:npx tsx test-insert.ts9. 常见问题与避坑指南问题原因解决方案Cannot find module /db/schemaTS 路径未生效检查tsconfig.json重启 VS Code TS 服务。Property id is missing误用了$inferSelect插入用$inferInsert(NewUser)查询用$inferSelect(User)。process.env.DATABASE_URL is undefinedconfig 文件没加载 env确保drizzle.config.ts顶部有dotenv.config()。TS 提示id不是可选的Schema 定义问题检查id是否加了.primaryKey()Drizzle 依赖此标记来推断可选性。10. 核心概念解析在开始动手之前我们需要明确今天涉及的四个关键角色及其关系组件角色比喻作用PostgreSQL Server仓库管理员真正存储数据的地方。它是一个后台服务负责接收指令、保存数据、保证数据安全。pgAdmin 4仓库可视化大屏图形化管理工具。让你不用敲黑底白字的命令通过点击鼠标就能查看表结构、浏览数据、执行 SQL。Drizzle ORM翻译官/中介位于你的 Next.js 代码和数据库之间。你写的是 TypeScript/JavaScript 代码Drizzle 把它“翻译”成数据库能听懂的 SQL 语句。.env文件门禁卡/钥匙存储敏感信息如数据库密码、连接地址。绝对不能上传到 GitHub是连接代码与数据库的唯一凭证。11. 环境准备与安装流程 (Windows 版2. 环境准备与安装流程 (Windows 版)2.1 下载官方安装包我们采用“一站式”安装策略一个安装包同时解决数据库和管理工具。下载地址PostgreSQL Windows Installer选择版本推荐下载最新的稳定版如 PostgreSQL 17 或 16架构选择Windows x86-64。2.2 安装向导关键步骤详解双击.exe文件后请严格遵循以下设置安装目录保持默认 (C:\Program Files\PostgreSQL\xx)。组件选择 (Select Components)⚠️关键点✅PostgreSQL Server(必选)✅pgAdmin 4(必选用于可视化操作)✅Command Line Tools(必选用于命令行调试)❌Stack Builder(安装完成后弹出的额外窗口直接关闭或选 No无需安装)设置超级用户密码 (Superuser Password)最重要用户名默认为postgres。密码设置一个你记得住的密码开发环境可用123456生产环境必须复杂。注意这个密码将用于.env配置和 pgAdmin 登录。端口 (Port)保持默认5432。区域 (Locale)保持默认Default locale。 总结通过这张架构逻辑图和类型推导流程我们清晰地看到了单一事实来源schema.ts定义了结构也定义了类型。自动化魔法$inferInsert自动过滤掉系统字段让你只关心业务数据。全链路安全从配置文件的路径检查到 TypeScript 的编译时校验再到数据库的最终写入每一层都有保护。现在你不仅拥有了一个可运行的环境更掌握了一套类型驱动开发 (Type-Driven Development)的最佳实践。去构建你的应用吧

相关文章:

Next.js + Drizzle ORM 全流程终极指南

📖 目录 🏗️ 全局架构逻辑图 (新增)前置准备:依赖安装核心配置:drizzle.config.ts (必填项检查)环境与安全:.env 与 .gitignoreTypeScript 增强:tsconfig.json 路径别名定义模型:db/schema.ts…...

BIM动画进了数字孪生就“瘫了”?一招破解模型迁移死局

作为一名深耕建筑、工程与施工(AEC)领域的设计师或工程师 是否曾经历过这样的困境: 在Revit、Fuzor、Navisworks、Lumion或BIM FILM等专业软件中 耗费大量心血构建了高精度建筑信息模型(BIM) 并为其赋予了复杂的施工模…...

如何用WoWmapper实现魔兽世界控制器完美映射:终极配置指南

如何用WoWmapper实现魔兽世界控制器完美映射:终极配置指南 【免费下载链接】WoWmapper Controller input mapper for World of Warcraft and ConsolePort 项目地址: https://gitcode.com/gh_mirrors/wo/WoWmapper 你是否曾经想过用游戏手柄来玩《魔兽世界》&…...

关于前端获取DOM节点的兼容IE6的代码封装

返回所有子元素节点的代码封装// 封装一个函数,这个函数可以返回元素的所有子元素节点(兼容到IE6),类似children的功能function getChildren(node){// 结果数组var children [];// 遍历node这个节点的所有子节点,判断每一个子节点的nodeType…...

俄罗斯莫斯科电子烟展:跟团公司高性价比选择策略拆解

对于想开拓俄罗斯市场的电子烟企业来说,俄罗斯莫斯科电子烟展是不可错过的出海窗口,但行业信息杂乱、代理鱼龙混杂的现状,让很多企业陷入“选便宜还是选靠谱”的两难。选对跟团公司,不仅能节省成本,更能直接决定参展效…...

如何利用OpenCode实现高效专业的AI驱动开发工作流?

如何利用OpenCode实现高效专业的AI驱动开发工作流? 【免费下载链接】opencode 一个专为终端打造的开源AI编程助手,模型灵活可选,可远程驱动。 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode 在当今快速迭代的软件开发…...

实战指南:如何用Mask R-CNN在iSAID数据集上提升航空影像分割效果(附调参技巧)

航空影像实例分割实战:Mask R-CNN在iSAID数据集上的调优策略 航空影像分析正逐渐成为城市规划、灾害监测和国防安全等领域的关键技术。与常规自然图像不同,这类影像通常包含大量密集分布的小目标,且目标尺度变化极大——从几个像素的小型车辆…...

解锁Intel RealSense三维点云生成:3大突破点与实战秘籍

解锁Intel RealSense三维点云生成:3大突破点与实战秘籍 【免费下载链接】librealsense Intel RealSense™ SDK 项目地址: https://gitcode.com/GitHub_Trending/li/librealsense 在工业检测、机器人导航和增强现实等领域,三维数据获取一直是技术落…...

Qianfan-OCR揭秘:4B参数端到端多模态文档解析,秒杀传统流水线!布局即思维,效率飙升!

本文深入解析了Qianfan-OCR这一4B参数的端到端多模态文档解析模型,它通过“布局即思维”机制解决了传统OCR流水线的误差传播和视觉上下文丢失问题。Qianfan-OCR基于Qianfan-VL架构,融合了高分辨率自适应编码、MLP和LLM,并采用大规模数据合成和…...

CUDA知识汇总2——cuFFT

cuFFT作为CUDA最基础的库之一,是NVIDIA提供的GPU加速的Fourier变换FFT库,能极大提升涉及FFT计算的科学计算、信号处理和深度学习等任务的速度。一、傅里叶变换和快速傅里叶变换​ Fourier变换是数字信号处理领域一个很重要的数学变换,它用来实…...

开源项目依赖管理:从冲突解决到高效协作的实践指南

开源项目依赖管理:从冲突解决到高效协作的实践指南 【免费下载链接】IPED IPED Digital Forensic Tool. It is an open source software that can be used to process and analyze digital evidence, often seized at crime scenes by law enforcement or in a corp…...

侧信道安全(Side-Channel Security)

第一章 背景 1.1 什么是侧信道攻击? 核心定义:侧信道攻击(Side-Channel Attack, SCA)是一种不直接攻击密码算法的数学结构,而是通过观察系统在执行密码运算时泄露的物理信息(时间、功耗、电磁辐射、声音等…...

Ubuntu 22.04 下 Intel N5095 核显驱动与 Jellyfin 硬解全攻略

1. 为什么需要升级内核与驱动? 很多朋友在Ubuntu 22.04上使用Intel N5095处理器搭建家庭媒体服务器时,都会遇到视频播放卡顿的问题。这主要是因为系统默认的5.15内核存在一个关键bug,导致11代Intel处理器的核显硬件解码功能无法正常工作。我刚…...

ComfyUI工作流迁移终极指南:从新手到专家的完整备份与复用教程

ComfyUI工作流迁移终极指南:从新手到专家的完整备份与复用教程 【免费下载链接】ComfyUI 最强大且模块化的具有图形/节点界面的稳定扩散GUI。 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI 想要将精心设计的AI创作工作流在不同设备间无缝迁移吗…...

phpIPAM vs Netbox深度对比:开源IP管理工具选型指南(附GCP云环境部署实录)

phpIPAM vs Netbox深度对比:开源IP管理工具选型指南(附GCP云环境部署实录) 在数字化转型浪潮中,企业网络基础设施的复杂度呈指数级增长。IP地址作为网络通信的基础要素,其管理效率直接影响运维团队的工作效能。传统Exc…...

电源防反接电路设计与实现方案

电源防反接电路的工程实现方案1. 电源防反接技术背景在工业控制和自动化设备中,电源接线错误是常见的操作失误。当电源极性接反时,轻则导致设备无法工作,重则烧毁关键元器件。传统的保险丝保护方案存在响应速度慢、需要人工更换等缺点&#x…...

从八股到实战!3月25日Python高并发面试,TaskGroup+JIT双杀通关

面试官推了推眼镜,盯着你的简历:“说说Python高并发吧,asyncio用过吗?” 你心里冷笑一声。这要是搁三年前,你肯定开始背诵:"asyncio是Python的异步IO库,使用事件循环机制,通过a…...

家庭实验室应用:OpenClaw+Qwen3.5-9B管理智能家居

家庭实验室应用:OpenClawQwen3.5-9B管理智能家居 1. 为什么需要AI中控? 去年装修新房时,我给自己定了个小目标:打造一个完全通过自然语言控制的智能家居系统。市面上的语音助手总让我觉得差点意思——要么响应速度慢&#xff0c…...

2026.03.25(第一天)

练习题 1 答案 #include <stdio.h> int main() {int m;scanf("%d", &m);int k 2;while (k < m && (m % k))/************found************/k;/************found************/if (m k )printf("YES\n");elseprintf("NO\n&quo…...

为什么你的Polars清洗比Pandas还慢?3步定位CPU缓存未对齐、SIMD未启用、线程池饥饿这3大隐形杀手

第一章&#xff1a;Polars 2.0 大规模数据清洗技巧 性能调优指南Polars 2.0 引入了全新的执行引擎与内存管理机制&#xff0c;显著提升了大规模数据清洗场景下的吞吐量与低延迟响应能力。相比 Pandas&#xff0c;其在 10GB 数据集上的列式过滤、字符串标准化与缺失值插补操作平…...

TWiLight Menu++深度剖析:多平台游戏启动器的技术实现与实践指南

TWiLight Menu深度剖析&#xff1a;多平台游戏启动器的技术实现与实践指南 【免费下载链接】TWiLightMenu DSi Menu replacement for DS/DSi/3DS/2DS 项目地址: https://gitcode.com/gh_mirrors/tw/TWiLightMenu TWiLight Menu作为一款开源的DSi菜单替代品&#xff0c;为…...

Open SWE 生态层:SWE-bench 基准测试与模型选型指南

Open SWE 生态层&#xff1a;SWE-bench 基准测试与模型选型指南在评估 AI 编码智能体时&#xff0c;基准测试是衡量能力的重要标尺。SWE-bench 是当前最具权威性的软件工程基准测试&#xff0c;Open SWE 支持多种模型运行。本文将深入解析 SWE-bench 体系&#xff0c;并提供实用…...

如何用AnythingLLM构建企业级知识库:从零到一的完整指南

如何用AnythingLLM构建企业级知识库&#xff1a;从零到一的完整指南 【免费下载链接】anything-llm 这是一个全栈应用程序&#xff0c;可以将任何文档、资源&#xff08;如网址链接、音频、视频&#xff09;或内容片段转换为上下文&#xff0c;以便任何大语言模型&#xff08;L…...

SpringBoot+Vue学生在线训练考试系统源码+论文

代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择&#xff1a; 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...

仅限核心开发者知晓的Python多解释器通信“暗通道”:通过_cffi_interpreter_bridge实现C层直接调用(非pickle、零序列化开销)

第一章&#xff1a;Python多解释器通信的演进与挑战Python长期以来以全局解释器锁&#xff08;GIL&#xff09;为基石&#xff0c;在单进程内保障线程安全&#xff0c;却也天然限制了多线程对CPU密集型任务的并行能力。为突破GIL束缚&#xff0c;Python 3.12正式引入原生支持的…...

嵌入式设备与PC通信协议设计核心原则

嵌入式设备与PC上位机通信协议设计原则1. 通信协议概述嵌入式系统与PC上位机之间的参数配置和数据交换需要设计高效的通信协议。在资源受限的嵌入式环境中&#xff0c;固定二进制协议因其高效性成为首选方案。一个完善的通信协议应包含以下基本域&#xff1a;帧头&#xff1a;标…...

FlashPatch终极指南:让Flash游戏在浏览器中重获新生

FlashPatch终极指南&#xff1a;让Flash游戏在浏览器中重获新生 【免费下载链接】FlashPatch FlashPatch! Play Adobe Flash Player games in the browser after January 12th, 2021. 项目地址: https://gitcode.com/gh_mirrors/fl/FlashPatch FlashPatch是一款强大的Wi…...

OpenClaw硬件推荐:流畅运行nanobot镜像的最低配置与性价比方案

OpenClaw硬件推荐&#xff1a;流畅运行nanobot镜像的最低配置与性价比方案 1. 为什么需要关注硬件配置&#xff1f; 去年夏天&#xff0c;我第一次尝试在笔记本上部署OpenClaw时遭遇了惨痛的失败。那台搭载i5-8250U的轻薄本在启动nanobot镜像后&#xff0c;风扇立刻像直升机一…...

Docker Compose 实践:多容器应用的配置与管理

Docker Compose 实践&#xff1a;多容器应用的配置与管理 前言 哥们&#xff0c;别整那些花里胡哨的理论。今天直接上硬菜——我在大厂一线使用 Docker Compose 的真实经验总结。作为一个白天写前端、晚上打鼓的硬核工程师&#xff0c;我对容器编排的追求就像对鼓点节奏的把控一…...

开源项目显卡兼容性避坑实战:CUDA版本适配与环境配置指南

开源项目显卡兼容性避坑实战&#xff1a;CUDA版本适配与环境配置指南 【免费下载链接】IsaacLab Unified framework for robot learning built on NVIDIA Isaac Sim 项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab 在开源项目开发过程中&#xff0c;显卡兼…...