如何解决TypeError: Cannot read properties of undefined (reading '0')报错
报错原因
该问题由MongoDB Node.js驱动版本差异导致:
- 3.x版本的
insertOne执行成功后,返回的结果对象包含ops属性,存放插入成功的文档数组 - 4.x及以上版本官方已移除
ops属性,直接访问data.ops[0]会抛出异常
解决方案
方案1:适配高版本驱动(推荐)
insertOne执行成功后,传入的userData对象会被自动挂载刚生成的_id字段,直接返回该对象即可,修正后代码如下:
var db = require("../config/connection") var collection = require("../config/collection") const bcrypt = require('bcrypt') module.exports={ doSignup:(userData)=>{ return new Promise(async(resolve,reject)=>{ userData.Password = await bcrypt.hash(userData.Password,10) db.get().collection(collection.USER_COLLECTION).insertOne(userData).then(()=>{ resolve(userData) }) }) }, }
方案2:回退驱动版本
无需修改业务代码,直接将MongoDB驱动降级到3.x最终稳定版即可:
执行命令:npm i mongodb@3.7.3
内容的提问来源于stack exchange,提问作者Sona Aneesh
相关产品推荐
相关产品推荐

