Next.js应用出现Mongoose TypeError: t.versions.node is undefined求助
Next.js应用报错TypeError: t.versions.node is undefined 解决方案
这个错误的核心原因是Mongoose被错误地在客户端代码中执行了。Mongoose是Node.js专属的MongoDB工具库,依赖Node.js环境的process对象,但浏览器/Next.js客户端环境没有这个对象,所以会触发process.versions.node(即报错里的t.versions.node)未定义的问题。
解决步骤
排查客户端代码的Mongoose引入
检查所有客户端组件(比如标注了"use client"的组件,或者App Router下默认的客户端组件),看是否直接/间接引入了Mongoose或依赖它的数据库操作代码。
把所有数据库相关逻辑(模型定义、增删改查等)移到服务器组件或API路由中:- 服务器组件:在文件顶部添加
"use server"(Next.js 13+ App Router) - API路由:放在
pages/api/目录下(Pages Router)
示例服务器组件写法:
// app/components/ServerDBHandler.js "use server"; import mongoose from 'mongoose'; import User from '../models/User'; export async function fetchUserList() { await mongoose.connect(process.env.MONGODB_URI); return User.find().lean(); }客户端组件通过异步调用这个服务器函数获取数据,不要直接在客户端碰Mongoose。
- 服务器组件:在文件顶部添加
清理依赖并重新构建
本地环境操作:# 删除依赖文件夹 rm -rf node_modules # 清除npm缓存 npm cache clean --force # 重新安装依赖 npm install # 重新构建 npm run build部署端(DeployBot)要确保部署流程会清理旧依赖缓存,重新安装依赖,避免用旧的缓存文件导致问题。
锁定兼容的依赖版本
查看GitHub提交记录,找到之前正常运行时的Mongoose版本,锁定该版本:npm install mongoose@x.x.x也可以尝试升级Mongoose到最新稳定版,确保和当前Next.js版本兼容:
npm install mongoose@latest调试定位问题代码
在疑似有问题的组件中添加日志,判断当前执行环境:console.log('当前环境是否存在process:', typeof process !== 'undefined');如果输出
false,说明这段代码在客户端执行,不能调用Mongoose。同时对比GitHub最近的提交记录,找到哪次更新引入了客户端调用Mongoose的逻辑。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

