这个站本身就是 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% 的"我代码明明是对的"。
后面踩到新的继续更。有同用这套栈的欢迎交流。