Hoy, decidí hacer un bot RPG de Discord que, por supuesto, requiere estadísticas de perfil como monedas y usuarios reales. Por lo tanto, busqué un tutorial sobre cómo puedo hacer esto con MongoDB pero me encuentro con un problema. Cuando un miembro del gremio se une y el bot se está ejecutando, los datos no se guardan sin ningún error y no estoy seguro de por qué sucede esto. Intenté solucionar el estado de la conexión agregando una línea console.log(mongoose.connection.readyState) después de que el bot intenta conectarse a la base de datos. Esto devuelve 1 , lo que significa que la conexión está bien. No puedo encontrar ninguna otra razón por la que esto ocurra, así que decidí hacer una pregunta después de horas de pensar.
(index.js): Conexión a la base de datos
const mongoose = require("mongoose"); mongoose.connect(process.env.MONGO_SERVER, { useNewUrlParser: true, useUnifiedTopology: true }).then(() => [ console.log("Connected to MongoDB Database successfully!"), console.log(mongoose.connection.readyState) ]).catch((err) => { console.error(err); });(profileSchema.js): creación de un esquema de perfil
const mongoose = require("mongoose"); const profileSchema = new mongoose.Schema({ id: { type: String, require: true, unique: true }, serverid: { type: String, require: true }, coins: { type: Number, default: 0 }, bank: { type: Number } }); const model = mongoose.model("ProfileModels", profileSchema); module.exports = model;(guildMemberAdd.js): creación y carga de datos en la base de datos
const profileModel = require('../models/profileSchema'); module.exports = async(client, discord, member) => { let profile = await profileModel.create({ id: member.id, serverid: member.guild.id, coins: 0, bank: 0 }) profile.save(); }La razón tiene que ver con la forma en que te conectas a mongo.
POR defecto, mongo cierra la conexión después de conectarse a una base de datos. Para hacer esto, cuando se conecte a mongo pass en la opción keepAlive , se vería así:
mongoose.connect(process.env.MONGO_SERVER, { useNewUrlParser: true, useUnifiedTopology: true, keepAlive: true })Esto significará que se mantendrá abierta una conexión activa a su base de datos.
¿Está exportando 'modelo' de profileSchema.js y requiere 'profileModel' de guildMemberAdd.js? así que importa el modelo de profileSchema y no de profileModel
Corrección: asegúrese de que se llame al evento guildMemberAdd agregando declaraciones de console.log .
Si no, comprueba si el código de guildMemberAdd es diferente a otros códigos de eventos.