使用事件处理程序将 discord bot 连接到 mongo 数据库

Connect discord bot to mongo DB with event handler

我正在构建一个 discord 机器人,我正在尝试将它连接到 mongo 数据库。

我的代码结构方式,我有一个 'main' 文件,名为 index.js,其中我 运行 我的主要代码,在主要代码上,我处理事件。在事件 'on ready'(执行一次)内,我连接到数据库。这就是我处理 index.js:

事件的方式
for (const file of eventFiles) {
const event = require(`./events/${file}`);
if (event.once) {
    client.once(event.name, (...args) => event.execute(...args, commands));
} else {
    client.on(event.name, (...args) => event.execute(...args, commands));
}

}

为了连接到数据库,我有一个名为 ready 的事件脚本,它只被调用一次。我遇到的问题是,当我尝试连接到数据库时,我卡住了,没有任何响应。我正在使用 mongoose js 并按照他们的文档进行连接。他们的文档指出我需要使用 async 函数来连接。

当我这样做时,代码变为 'stuck'。如果我从下面的代码中删除 asyncawait 语句,它就可以工作。可以这样使用它,但这不是一个好的做法。 ready.js 的代码如下:

const mongoose = require('mongoose')
require('dotenv').config()
const testSchema = require('../test-schema')

module.exports = {
    name: 'ready',
    once: true,



    async execute(client, commands) {
        console.log(`Ready! Logged in as ${client.user.tag}`);

        await mongoose.connect(process.env.MONGO_URI);
        console.log("Database Connected!");

    },
};

那么,只删除 async 和 await 可以吗?

提前致谢。

免责声明:英语不是我的第一语言,如果听起来很混乱,请见谅。

所以,我想通了(有点)。

将我的代码更改为以下内容,并且有效:

const mongoose = require('mongoose')
require('dotenv').config()


module.exports = {
    name: 'ready',
    once: true,

    async execute(client, commands) {
        console.log(`Ready! Logged in as ${client.user.tag}`);

        main().catch(err => console.log(err));

        console.log("Database Connected!");

    },
};


async function main() {
    await mongoose.connect(process.env.MONGO_URI);
}

基本上,将连接放在主函数中,并在执行方法上调用它。

成功了。