检查firebase数据库中是不是定义了一个值 - Discord.js

Posted

技术标签:

【中文标题】检查firebase数据库中是不是定义了一个值 - Discord.js【英文标题】:Check if there is a value defined in the firebase database - Discord.js检查firebase数据库中是否定义了一个值 - Discord.js 【发布时间】:2021-08-19 01:43:40 【问题描述】:

我正在开发一个不和谐的机器人,并且我正在使用 firebase 数据库。在下面的代码中,我想检查mstatus的值是否设置为"CASADO",但是如果这个值还不存在,则执行另一个命令。

database.ref(`Servidores/$message.guild.id/Users/$message.author.id/Casamento`).once('value').then(async function(db) 
        
        if (db.val().mstatus === 'CASADO') 
            const embederro = new Discord.MessageEmbed()
            .setColor(process.env.COLOR)
            .setDescription(`**<a:9999:847961716527595520> **Você já está casado. Use \`$process.env.PREFIXdivorciar\` para poder divorciar.`)
            .setTimestamp()
            .setFooter(moment(message.createdAt).format('D/MM/YYYY'))
            .setAuthor(`Awake Bot`,bot.user.displayAvatarURL())

            message.channel.send(embederro)

            return;
         else 
            console.log('OK');
        
    )

上面的代码返回这个错误: TypeError: Cannot read property 'mstatus' of null

【问题讨论】:

【参考方案1】:

你可以检查这个DataSnapshot所在位置的key是不是null

database
  .ref(`Servidores/$message.guild.id/Users/$message.author.id/Casamento`)
  .once('value')
  .then(async function (snapshot) 
    const key = snapshot.key;

    if (key === null)
      return console.log(`The value doesn't exist yet`);

    const val = snapshot.val();

    if (val === null)
      return console.log(`The value is null`);

    if (val.mstatus === 'CASADO') 
      const embederro = new Discord.MessageEmbed()
        .setColor(process.env.COLOR)
        .setDescription(
          `**<a:9999:847961716527595520> **Você já está casado. Use \`$process.env.PREFIXdivorciar\` para poder divorciar.`,
        )
        .setTimestamp()
        .setFooter(moment(message.createdAt).format('D/MM/YYYY'))
        .setAuthor(`Awake Bot`, bot.user.displayAvatarURL());

      return message.channel.send(embederro);
    

    console.log(`The value exists but the mstatus is $val.mstatus`);
  );

【讨论】:

我的继续给出错误“无法读取 null 的属性 'mstatus'”。因为当用户刚刚进入服务器时,数据库中没有定义“mstatus”值。你能帮我解决这个问题吗? 您还可以检查val 是否为空。我刚刚更新了我的答案。它是否按预期工作? 很高兴听到这个消息。不客气:) Key 是一个非空值,对于上面的代码,将始终等于"Casamento",因此无需对其进行空测试(即使数据不存在)。虽然您可以测试snapshot.val() == null,但测试snapshot.exists() 更正确。

以上是关于检查firebase数据库中是不是定义了一个值 - Discord.js的主要内容,如果未能解决你的问题,请参考以下文章

检查firebase数据库中是不是存在值

如何检查 Unity 的 Firebase 数据库中是不是已存在键/值

Swift 3 + Firebase:检查数组内的值是不是存在?

如何检查 Firebase 实时数据库(Dart/Flutter)中是不是存在值?

Swift Firebase 检查值是不是存在

检查 Firebase 实时数据库中的现有值