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

使用Mongoose连接MongoDB时遭遇URI未定义错误及ES模块适配问题求助

Mongoose连接MongoDB时遭遇URI未定义错误及ES模块适配问题求助

看起来你遇到了两个核心问题:环境变量加载失败导致MongoDB URI未定义,以及ES模块下无法使用CommonJS的require语法。我来一步步帮你解决:

1. 解决ES模块下的dotenv加载问题

因为你的项目在package.json里设置了"type": "module",属于ES模块规范,不能再用CommonJS的require语法引入依赖,得换成ES模块的import:

// 一定要放在index.js的最顶部
import dotenv from 'dotenv';
dotenv.config();

如果还没安装dotenv,先执行安装命令:

npm install dotenv

2. 修正.env文件的格式错误

你的.env文件里给MONGO_URL加了单引号,这会导致dotenv解析出来的URI包含多余的引号,直接引发连接失败!把引号去掉,同时注意变量名和值之间不要留空格:

MONGO_URL=mongodb+srv://User:Password@cluster0.is8ykod.mongodb.net/?retryWrites=true&w=majority
PORT=3001

3. 处理Mongoose的弃用警告

在调用mongoose.connect()之前,添加一行代码设置strictQuery,就能消除这个警告:

// 推荐设置为false,适配Mongoose 7的默认行为
mongoose.set('strictQuery', false);
// 如果你想保持当前严格查询模式,也可以设为true:mongoose.set('strictQuery', true);

修正后的完整index.js代码

import express from 'express'; // 根据你实际用到的框架调整
import mongoose from 'mongoose';
import dotenv from 'dotenv';

dotenv.config();

const app = express();
const PORT = process.env.PORT || 6001;

// 先处理弃用警告
mongoose.set('strictQuery', false);

mongoose.connect(process.env.MONGO_URL, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
})
.then(() => {
  app.listen(PORT, () => console.log(`Server Port: ${PORT}`));
})
.catch((error) => console.log(`${error} did not connect`));

这样调整后,环境变量就能正常加载,URI不再是undefined,同时弃用警告也会消失,应该就能成功连接MongoDB啦!

备注:内容来源于stack exchange,提问作者Gialuca Agostino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:13:04