node.js - discord bot 不保存到 mongoDB
问题描述
我正在通过 discordjs 机器人连接到 mongoDB,但数据/数据库似乎没有保存。我已经添加了 IP 地址,并且当数据库连接以确认连接时,我会显示一条控制台消息。
东西的基本设置:
lass EconomyClient extends Client {
constructor() {
super();
this.discord = require("discord.js");
this.fs = require("fs");
this.path = require("path");
this.ms = require("ms");
this.mongoose = require("mongoose");
this.commands = new Collection();
this.timeouts = new Collection();
this.config = {
prefix: `h!`,
};
this.schema = this.mongoose.model(
`economy`,
new this.mongoose.Schema({
User: String,
Coins: Number
})
);
const self = this;
this.economy = {
async getBal(User) {
return await self.schema.findOne({ User }).then((d) => d ? d.Coins : 0);
},
async addBal(User, Coins) {
return await self.schema.findOne({ User }), async(err, data) => {
if(err) throw err;
if(data) {
data.Coins += Coins;
} else {
data = new self.schema({ User, Coins });
};
data.save();
}
}
}
}
和连接...
start(token, path) {
this.commandHandler(path);
this.login(token);
this.mongoose.connect(
`mongodb+srv://<dbUser>:<dbPassword>@cluster0.3esa7.mongodb.net/Data?retryWrites=true&w=majority`,
{
useNewUrlParser: true,
useUnifiedTopology: true,
}
);
this.mongoose.connection.on("connected", () =>
console.log("DB connected ")
);
this.on("ready", () => console.log(`${this.user.tag} is now online!`));
this.on("message", async (message) => {
if (
message.author.bot ||
!message.guild ||
!message.content.toLowerCase().startsWith(this.config.prefix)
)
return;
我创建了一个“工作”命令来获取随机数量的硬币和一个“getBalance”命令。work 命令似乎有效——至少它选择了一个随机数——但它似乎没有将其保存到数据库中,因为 getBalance 命令总是返回为零。当我转到我的 mongoDB 帐户中的 collectios 选项卡时,它没有列出任何内容(假设它应该列出?)。
解决方案
There was a parentheses in the wrong spot --
was:
async addBal(User, Coins) {
return await self.schema.findOne({ User }), async(err, data) => {
if(err) throw err;
if(data) {
data.Coins += Coins;
} else {
data = new self.schema({ User, Coins });
};
data.save();
}
notice the last paren here: self.schema.findOne({ User })
should have been:
async addBal(User, Coins) {
return await self.schema.findOne({ User }, async(err, data) => {
if(err) throw err;
if(data) {
data.Coins += Coins;
} else {
data = new self.schema({ User, Coins });
};
data.save();
})
moved the paren to the end of the snippet.
推荐阅读
- constants - SystemVerilog 无法识别常量:错误:范围必须由常量表达式限定
- javascript - Svelte - 绑定子组件的属性
- android - 如何使用 Gradle 文件从 Android Google Source 下载源代码
- java-8 - 这是用正确的java8方式编写的吗?
- ansible - 避免剧本中未使用和未定义的变量
- c# - 我是否需要在逻辑请求端手动将 AsyncLocal 变量的值更改为“Dispose”/“Release”
- reactjs - 如何解决reactjs中的无限循环错误?
- vba - VBA 中的毕达哥拉斯公式 - 指数和幂
- php - 使用 PHP 从文本文件列表中删除多个文件及其名称变体
- php - 从 php popen 压缩和从命令行不同的结果