我有一个与布尔值相关的 Mongoose 错误
Posted
技术标签:
【中文标题】我有一个与布尔值相关的 Mongoose 错误【英文标题】:I have A Mongoose Error Related To Booleans 【发布时间】:2021-02-09 08:28:20 【问题描述】:我正在制作一个不和谐的机器人并使用 mongodb,我有一个 bool 值,但是每当我运行经济命令时,该 bool 值都会从 false 设置为 true。我不希望它被设置为真,但我知道是什么导致它为真。这是我的代码。
const MessageEmbed = require('discord.js');
const colors = require('../../colors.json');
const user = require('../../models/user');
const User = require('../../models/user');
const mongoose = require('mongoose');
const ms = require('parse-ms');
module.exports =
name: 'beg',
description:
'This command can only be used once every 5 hours and gives you $50.',
category: 'economy',
usage: 'beg',
aliases: [],
run: async (client, message, args) =>
let reward = 50;
let timeout = 18000000;
const S = new MessageEmbed();
S.setAuthor(message.author.username);
S.setColor(colors.green);
S.setDescription(`Here, take $$reward!`);
S.setFooter(
message.author.username,
message.author.displayAvatarURL( dynamic: true, size: 512 )
);
S.setThumbnail(client.user.displayAvatarURL());
S.setTimestamp();
S.setTitle('Beg!');
User.findOne(
userID: message.author.id,
,
async (err, user) =>
if (err) console.error(err);
if (!user)
const newUser = new User(
_id: mongoose.Types.ObjectId(),
userID: message.author.id,
username: message.author.username,
lb: 'all',
money: 0,
deposited: 0,
iq: 0,
job: 'None',
daily: 0,
beg: 0,
work: 0,
aq: 0,
counteraq: 0,
counterw: 0,
reputation: 0,
banked: 0,
badge: 0,
charm: 0,
ring: 0,
necklace: 0,
penguin: 'None',
fish: 0,
melon: 0,
orange: 0,
meat: 0,
chocolate: 0,
neckact: false,
charmact: false,
badgeact: false,
ringact: false,
muteCount: 0,
warnCount: 0,
kickCount: 0,
banCount: 0,
);
newUser
.save()
.then((result) => console.log(result))
.catch((err) => console.error(err));
const sentBeg = await message.channel.send( embed: S );
else
if (timeout - (Date.now() - user.beg) > 0)
let cdt = ms(timeout - (Date.now() - user.beg));
const cd = new MessageEmbed();
cd.setAuthor(message.author.username);
cd.setColor(colors.red);
cd.setDescription(
`Please stop begging! It's quite selfish! Please wait at least: $cdt.hoursh, $cdt.minutesm and $cdt.secondss.`
);
cd.setFooter(
message.author.username,
message.author.displayAvatarURL( dynamic: true, size: 512 )
);
cd.setThumbnail(client.user.displayAvatarURL());
cd.setTimestamp();
cd.setTitle('Stop Begging!');
const sentCD = await message.channel.send( embed: cd );
else
if ((user.ringact = true))
user.beg /= timeout;
user.money += reward;
user.save().catch((err) => console.error(err));
message.channel.send(S);
else if ((user.ringact = false))
user.money += reward;
user.beg = Date.now();
user.save().catch((err) => console.error(err));
message.channel.send(S);
);
,
;
【问题讨论】:
【参考方案1】:这个问题有一个非常简单的解决方法。您已经错误地定义了 if
语句。要检查一个值是否等于另一个值,您可以使用bar == foo
或bar === foo
(这两种方法之间的区别can be found here)。
但是,您在 if
语句中使用单个等号,用于为变量赋值。以下是修复代码的方法:
更改以下行:
if (user.ringact = true)
//...
else if (user.ringact = false)
//...
到这里:
if (user.ringact === true)
//...
else if (user.ringact === false)
//...
作为一个小奖励,该代码可以缩短为以下内容:
if (user.ringact)
//...
else
//...
或者如果你想进一步缩短整个代码部分,你可以使用这个(它利用了ternary operator):
if (timeout - (Date.now() - user.beg) > 0)
//...
else
user.beg = user.ringact ? user.beg / timeout : Date.now();
user.money += reward;
user.save().catch(err => console.error(err));
message.channel.send(S);
【讨论】:
以上是关于我有一个与布尔值相关的 Mongoose 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Node + Express + Mongoose 中的单选按钮传递布尔值?
伊斯坦布尔封面报告对于使用 mocha 进行测试是错误的(使用 Mongoose)
使用 jquery 访问设置为 attr 的 Mongoose 模式键(布尔值),但它返回未定义