Mongoose 错误:“拓扑被破坏”,有啥问题?
Posted
技术标签:
【中文标题】Mongoose 错误:“拓扑被破坏”,有啥问题?【英文标题】:Mongoose error: "Topology was destroyed", what's the problem?Mongoose 错误:“拓扑被破坏”,有什么问题? 【发布时间】:2021-09-23 13:32:03 【问题描述】:我正在为我的 discord 机器人编写一个调平系统,但在途中遇到了一个 mongoerror,有谁知道为什么会发生这种情况? (每当有人聊天时,addXp 函数就会运行,该错误记录在 removeTimeout 函数中。)我在代码中以更多方式使用了猫鼬,但这之前还没有发生过,我也确实发现了其他人的这个错误的问题,但是没有找到合适的解决方案。
async function removeTimeout(leveldataid)
console.log("removetimeout")
await mongo().then(async (mongoose) =>
try
await levelSchema.findByIdAndUpdate(
leveldataid,
_id: leveldataid,
oncooldown: false
,
upsert: true
)
catch(err)
console.log(err)
finally
mongoose.connection.close()
)
async function addXP(member, guild)
let data = undefined
let changedleveldata = false
await mongo().then(async (mongoose) =>
try
data = await levelenabledSchema.findById(guild.id)
if (data)
if (data.enabled == true)
let extraxp = Math.floor(Math.random() *20) + 15
let leveldata = await levelSchema.findById(`guild$guild.idmember$member.id`)
if (!leveldata)
await levelSchema.findByIdAndUpdate(
`guild$guild.idmember$member.id`,
_id: `guild$guild.idmember$member.id`,
guild: guild.id,
level: 1,
maxXp: 113,
xp: extraxp,
oncooldown: true
,
upsert: true
)
else
if (leveldata.oncooldown == false)
let newlevel = leveldata.level
let newMaxXp = leveldata.maxXp
newMaxXp = Math.floor(newMaxXp)
let xp = leveldata.xp
xp +=extraxp
if (xp > leveldata.maxXp)
xp -=Math.floor(100*1.135**newlevel)
newlevel++
newMaxXp = 100*1.13**newlevel
await levelSchema.findByIdAndUpdate(
`guild$guild.idmember$member.id`,
level: newlevel,
maxXp: newMaxXp,
xp: xp,
oncooldown: true
,
upsert: true
)
changedleveldata = true
catch(err)
console.log(err)
finally
mongoose.connection.close()
if (changedleveldata == true)
setTimeout(remoteTimeout(`guild$guild.idmember$member.id`), 60000)
)
【问题讨论】:
【参考方案1】:这基本上意味着节点服务器和mongoDB之间的连接在写入数据时被中断了。
解决您的问题的方法是从您的代码中删除 finally
块,因为它会在机器人被许多用户使用时中断连接,并且机器人在关闭之前的连接时尝试写入数据.
await mongo().then(async (mongoose) =>
try // code here
catch(e) console.log(e);
);
【讨论】:
我这样做了,但没有奏效,根据你的解释,我浏览了我的脚本,发现我在一个不同的函数中关闭了连接,该函数也在发送的每条消息中运行!感谢您让我知道为什么会这样! np 乐于助人:D以上是关于Mongoose 错误:“拓扑被破坏”,有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章