欢迎来到 Hiraba,您好,请登录 或 凭邀请码注册
登录| 注册
≡ 您当前的位置:Hiraba 首页 » 技术分享 » Nuxt 4 + Drizzle 全栈一个月,记几个真踩过的坑
Nuxt 4 + Drizzle 全栈一个月,记几个真踩过的坑回复 1 · 浏览 45
管理员管理员
Lv1
楼主
发表于 2026年9月27日 11:08〖精华〗

这个站本身就是 Nuxt 4 + Drizzle + PostgreSQL 写的,把一个月里印象最深的几个坑记一下,后来人少走弯路。

1. 服务端工具函数里的顶层 await

server/utils 下的模块如果初始化时需要 await(比如代码高亮器),Nitro 的构建目标要提到 es2022 以上,不然 build 直接报错。开发时不炸、打包才炸,特别阴。

2. drizzle 的查询构建器是惰性的

ts
void db.update(users).set({ lastLogin: new Date() }).where(...)

这么写不会执行。drizzle 的查询是个 thenable,不 await 或者 .catch() 消费它,SQL 根本不会发出去。想 fire-and-forget 要这样:

ts
db.update(users).set({ lastLogin: new Date() }).where(...).catch(() => {})

我们有个"最近使用时间"字段就这么静默失效了半个多月,日志里一点错都没有。

3. ON CONFLICT 和迁移的事务

psql 执行迁移脚本记得加 -v ON_ERROR_STOP=1,不然中间某条炸了后面照跑,库就半新不旧了。

4. SSE / WebSocket 在开发热重载下的怪象

改 server/utils 深层文件后热重载经常抽风(模块加载错乱、连接死循环),表现为各种灵异 500。重启 dev 解决 90% 的"我代码明明是对的"。


后面踩到新的继续更。有同用这套栈的欢迎交流。

♨ 快速回复
全部回复(1)按楼层按热度
1 楼发表于 2026年9月27日 11:09

补充一条今天刚踩的:Drizzle 的 inArray() 传空数组时部分版本会生成非法 SQL——用前先判空,arr.length ? inArray(...) : 直接跳过该条件。