Windows7下Node.js连接mongoose与MongoDB云库报No valid exports main错误如何解决
问题根因
你当前安装的mongoose@6.x版本依赖的MongoDB Node.js驱动v4+,使用了ECMAScript模块的exports字段定义包入口,这个特性仅在Node.js v12.20.0 / v14.13.0及以上版本支持。而Windows7系统最高仅支持到Node.js v13.x,无法适配新版本驱动的模块规则,因此触发模块找不到的报错。你之前降级操作未生效大概率是没有降级到兼容的大版本区间。
解决步骤
- 第一步:卸载当前不兼容的依赖包
执行命令:npm uninstall mongoose mongodb - 第二步:安装适配Win7/低版本Node的稳定依赖
选择mongoose 5.x的最新LTS版本,该版本最低仅要求Node.js 10,完全兼容Win7可运行的所有Node版本,执行命令:npm install mongoose@5.13.20 - 第三步:调整本地数据库连接代码适配旧版本规则
修改后的代码如下:
const mongoose = require('mongoose'); module.exports = async () => { try{ await mongoose.connect(process.env.DB_URL, { useNewUrlParser: true, useUnifiedTopology: true }); console.log("Database connected"); }catch(error) { console.log("error: ", error); throw new Error(error); } }
- 第四步:如需使用MongoDB云连接,额外安装兼容版本的原生驱动
执行命令:npm install mongodb@3.7.4
修改后的云连接代码如下:
const { MongoClient } = require('mongodb'); const uri = "mongodb+srv://user1:<你的密码>@cluster0.vl2la.mongodb.net/myFirstDatabase?retryWrites=true&w=majority"; const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true }); client.connect(err => { if(err) { console.log('连接错误', err) return } const collection = client.db("test").collection("devices"); // 执行你需要的数据库操作 client.close(); });
- 第五步:删除项目根目录下的
package-lock.json文件和node_modules文件夹,重新执行npm install安装所有依赖,之后启动项目即可。
验证方式
执行npm run dev启动项目,控制台打印Database connected且无报错即为问题解决。
内容的提问来源于stack exchange,提问作者Denver Thomas
相关产品推荐
相关产品推荐

