使用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
相关产品推荐
相关产品推荐

