You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 14构建阶段为何会尝试连接数据库?

为什么Next.js 14构建时会尝试连接数据库并导致失败?

核心原因是Next.js 14 App Router的预渲染机制,具体分为两点:

  1. 服务器组件的预渲染执行
    你的Dashboard是服务器组件,默认情况下Next.js在npm run build阶段会预渲染所有服务器组件,生成静态HTML或路由缓存。这意味着构建时会执行组件内的所有代码,包括await db.query.documents.findFirst()这个数据库查询操作,自然会触发数据库连接。如果数据库未运行,查询失败就会导致构建中断。

  2. Drizzle初始化时的Schema校验
    在lib/db.js中,你用Drizzle包装连接池创建db实例时,Drizzle默认会对传入的数据库连接做Schema校验——也就是核对你定义的@/schema和数据库实际表结构是否一致。这个校验过程会尝试建立数据库连接,而lib/db.js在服务器组件被import时就会加载执行,所以构建阶段就会触发这个连接动作。

避免构建时依赖数据库的方案

  • 将数据库查询逻辑移到Server Actions或API路由中,这些代码只会在请求时执行,不会在构建阶段运行;
  • 在服务器组件中添加export const dynamic = 'force-dynamic',强制开启动态渲染,让Next.js不在构建阶段预渲染该组件,改为每次请求时再执行组件代码;
  • 调整Drizzle初始化配置,禁用构建时的Schema校验(比如设置mode: 'production',具体可参考Drizzle官方配置说明)。

内容的提问来源于stack exchange,提问作者user3357926

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:32:06