使用事件处理程序将 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'。如果我从下面的代码中删除 async
和 await
语句,它就可以工作。可以这样使用它,但这不是一个好的做法。 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);
}
基本上,将连接放在主函数中,并在执行方法上调用它。
成功了。
我正在构建一个 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'。如果我从下面的代码中删除 async
和 await
语句,它就可以工作。可以这样使用它,但这不是一个好的做法。 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);
}
基本上,将连接放在主函数中,并在执行方法上调用它。
成功了。