【问题标题】:MongoError: Topology is closed, please connect when making a discord.jsv12 mute commandMongoError: Topology is closed, please connect when making a discord.jsv12 mute command
【发布时间】:2021-11-01 08:58:06
【问题描述】:

我见过很多人收到 Topology is closed 错误,但我从未见过一个直接的答案,它不仅回答了给出的确切代码 sn-p 的问题,而且通常概述了拓扑结构及其工作原理。

我正在关注 YT 上的 WOK DiscordJSv12 教程,并从存储库中克隆了静音命令并添加了一些调整以包含嵌入。但是当我运行代码时,我得到了拓扑错误。

这是我得到错误的文件:

const muteSchema = require('@schemas/mute-schema')

module.exports = (client) => {
    const checkMutes = async () => {
        console.log('CHECKING MUTE DATA')

        const now = new Date()

        const conditional = {
            expires: {
                $lt: now
            },
            current: true,
        }
//The error is on this next line, it doesn't like that 'await'
        const results = await muteSchema.find(conditional)

        if (results && results.length) {
            for (const result of results) {
                const { guildId, userId } = result

                const guild = client.guilds.cache.get(guildId)
                const member = (await guild.members.fetch()).get(userId)

                const mutedRole = guild.roles.cache.find((role) => {
                    return role.name === 'Muted'
                })

                member.roles.remove(mutedRole)
            }

            await muteSchema.updateMany(conditional, {
                current: false,
            })
        }

        setTimeout(checkMutes, 1000 * 60 * 10 )
    }
    checkMutes()

    client.on('guildMemberAdd', async (member) => {
        const { guild, id } = member

        const currentMute = await muteSchema.findOne({
            userId: id,
            guildId: guild.id,
            current: true,
        })

        if (currentMute) {
            const role = guild.roles.cache.find((role) => {
                return role.name === 'Muted'
            })

            if (role) {
                member.roles.add(role)
            }
        }
    })
}

这是完成此文件逻辑的另一个文件:link

这里也是架构:link

还有我连接到 mongo 的 mongo 文件:link

所以我想知道如何解决我的问题,以及对于未来的错误,我如何自己解决它以及错误的基本含义,因为错误中没有指定我自己的代码的确切行。

【问题讨论】:

  • 您能否附上您实际调用连接到 mongodb 数据库的函数的文件?
  • 这4个文件都是我的mongo代码和静音命令
  • 虽然你什么时候真正调用这个函数!如果您不调用该函数,也就是不连接它,它不会自动连接到 mongo 吗

标签: mongodb discord.js topology


【解决方案1】:

每当您遇到上述这些类型的错误时: MongoErrror: Topology is closed,它们指的是与您的 Mongo 数据库的未建立连接,由您的 comment 指示,我可以弄清楚您从未在 @util/mongo.js file 中调用您用于连接 MongoDB 的连接函数。为了克服这个问题,您可以在找到结果之前调用该函数并进一步关闭它(良好做法),方法如下:


    const mongo = require("@util/mongo.js"); // reference from WOK source code ( he hasn't added this but filepath would be somewhat this, you can add the filepath to your connection function.
    await mongo().then(async (mongoose) => {
          try {
    const results = await muteSchema.find(conditional)
    ... // Your code to utilise this result 
    } finally {
    mongoose.connection.close()
    }

Work Off Keys 可能忘记在他们的许多教程中提到这是一个常见错误,因此他们有一个未列出的视频here。大多数情况下,您现在可以自己修复此错误?。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-16
    • 2022-11-09
    • 2022-12-02
    • 2022-12-01
    • 2019-09-21
    • 2022-12-26
    • 2016-09-14
    • 2021-01-02
    相关资源
    最近更新 更多