'Connect discord bot to mongo DB with event handler

I am building a discord bot, and I'm trying to connect it to a mongo DB.

The way my code is structured, I have a 'main' file, called index.js, where I run my main code, on the main code, I handle the events. Inside the event 'on ready'(which is executed once) I connect to the DB. This is how I handle the events on 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));
}

}

To connect to the DB, I have an event script, called ready, that is called only once. The problem I'm having is, when I try to connect to the DB, I get stuck without a response. I'm using mongoose js and following their documentation to connect. Their documentation states that I need to use an async function to connect.

When I do that, the code gets 'stuck'. If I remove the async and await statement form the code below, it works. It would be ok to use it like that, but that's not a good pratice. Code fore ready.js follows:

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!");

    },
};

So, is it ok to just remove the async and await?

Thanks in advance.

Disclaimer: English is not my first language, sorry if it sounds confuse.



Solution 1:[1]

So, I figured it out (sort of).

Changed my code to the following, and it worked:

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);
}

Basically, put the connection inside the main function, and called it on the execute method.

It worked.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 p-destri