路过
路过的甲楼主
Auth.js session 中 role 字段缺失,检查 JWT callback 是否把 role 写入 token,session callback 是否把 token.role 写入 session.user.role。两步缺一不可。
Prisma @@map 是表名映射(模型 → 数据库表名),字段 @map 是列名映射。混淆会导致查询的表/列名不匹配。规则:模型 PascalCase + @@map('snake_case'),字段 camelCase(DB 用 snake_case 时加 @map)。
Next.js 15 中 next/dynamic + ssr:false 在 Server Component 中不允许。解决:创建一个 'use client' 的包装组件,在包装组件中用 next/dynamic + ssr:false,然后在 Server Component 中导入这个包装组件。
next-intl t() 模板字符串拼接报错,因为动态拼接翻译键不被支持。用显式 Record 映射替代 t(`${type}Opt`),改为 const labels: Record<string, string> = { ... } 然后 labels[type]。
遇到 hydration mismatch 报错,一般是服务端和客户端渲染的 HTML 不一致。常见原因:① 在组件中用了 Date.now() 或 Math.random() ② 用了 window/document 等浏览器 API ③ 服务端和客户端时区不同。解决:把动态值放到 useEffect 里设置,或加 suppressHydrationWarning。