Node.js使用Fetch API+Mongoose向MongoDB存数据无文档生成问题
问题分析与修复方案
以下是导致集合无文档生成的几个关键问题及修复方法:
循环条件拼写错误:代码中
response.lenght是笔误,正确拼写为response.length。这个错误会让循环完全不执行,自然不会插入任何数据。
修复:将lenght修改为length。未处理异步保存操作与错误:
post.save()是异步Promise操作,直接调用不等待,可能在保存完成前程序就已退出;且没有错误捕获,即使保存失败也无法排查问题。
修复:给post.save()添加await,并包裹在try/catch块中捕获错误:try { await post.save(); console.log(`成功插入玩家ID:${response[i].id}`); } catch (err) { console.error(`插入失败:${err.message}`); }MongoDB连接未确认成功:
mongoose.connect是异步操作,直接调用后立即执行数据插入,可能连接还未建立完成,导致插入失败。
修复:通过Promise链式调用确认连接成功后,再执行数据获取与插入:mongoose.connect("mongodb://localhost/highscore") .then(() => { console.log("MongoDB连接成功"); getPlayers(); }) .catch(err => { console.error("连接失败:", err); });字段类型不匹配可能触发验证失败:如果API返回的
position/id/score是字符串类型(如"100"而非数字100),会触发Mongoose的数字类型验证,导致保存失败但无提示。
修复:赋值时强制转换为数字类型:const post = new Post({ position: Number(response[i]['position']), id: Number(response[i]['id']), score: Number(response[i]['score']), });
内容的提问来源于stack exchange,提问作者yandry santana
相关产品推荐
相关产品推荐

