为何mongoose的insertMany函数抛出TypeError?求解决方案
MongoDB插入数据报错及连接配置解决方案
一、先修复代码中的潜在语法问题
你的insertMany数组最后一个对象末尾多了一个逗号,虽JS允许但可能引发解析异常,先移除:
async function insertDummyCategoryData(){ try{ await Category.insertMany([ { "name": "Thai", "image": "1.jpg" }, { "name": "Indian", "image": "1.jpg" }, { "name": "Chinese", "image": "1.jpg" }, { "name": "American", "image": "1.jpg" }, { "name": "Mexican", "image": "1.jpg" }, { "name": "Continental", "image": "1.jpg" } // 移除此处多余的逗号 ]); } catch(error){ console.log('Error in adding details to the DB ', error); // 新增:打印完整错误栈,方便精准定位 console.log('完整错误信息:', error.stack); } } insertDummyCategoryData();
二、解决TypeError: Cannot read properties of undefined (reading 'length')报错
这个错误核心原因是Mongoose与MongoDB版本不兼容,或数据库连接未成功导致错误对象结构异常,按以下步骤处理:
调整Mongoose版本
- 升级到最新稳定版:
npm install mongoose@latest - 若升级后问题依旧,尝试降级到兼容版本(适配MongoDB 5.x/6.x的6.x系列):
npm install mongoose@6.11.0
- 升级到最新稳定版:
验证数据库连接状态
在连接代码后添加状态监听,确认是否成功连接:const mongoose = require('mongoose'); mongoose.connect(process.env.MONGODB_URI, {useNewUrlParser: true, useUnifiedTopology: true}); // 新增连接状态监听 const db = mongoose.connection; db.on('error', console.error.bind(console, '数据库连接错误:')); db.once('open', function() { console.log('数据库连接成功'); });
三、调整MongoDB连接字符串(替换localhost为IP)
按以下步骤操作:
- 获取本机IP地址
- Windows:打开命令提示符,输入
ipconfig,找到IPv4地址(如192.168.3.10) - Mac/Linux:打开终端,输入
ifconfig或ip addr,找到本机内网IP
- Windows:打开命令提示符,输入
- 修改环境变量
MONGODB_URI
将原连接字符串mongodb://localhost:27017/你的数据库名替换为mongodb://你的IP地址:27017/你的数据库名,示例:MONGODB_URI=mongodb://192.168.3.10:27017/recipe_blog - 允许MongoDB监听所有IP(可选)
若本地连接仍失败,修改MongoDB配置文件(通常为mongod.conf):- 找到
bindIp配置项,改为bindIp: 0.0.0.0(允许所有IP访问) - 重启MongoDB服务
- 找到
内容的提问来源于stack exchange,提问作者Swati
相关产品推荐
相关产品推荐

