Discord.js 无法使用 mySQL 在数组中找到项目时出错

Posted

技术标签:

【中文标题】Discord.js 无法使用 mySQL 在数组中找到项目时出错【英文标题】:Error when Discord.js cannot find an item in an array with mySQL 【发布时间】:2020-09-10 22:23:31 【问题描述】:

我收到此错误:

    C:\Users\redacted\Downloads\redacted\node_modules\mysql\lib\protocol\Parser.js:437
      throw err; // Rethrow non-MySQL errors
      ^ 
TypeError: Cannot read property 'reason' of undefined
  at Query.con.query (C:\Users\redacted\Downloads\redacted\bot.js:83:30)

这是我的代码:

const args = message.content.split(' ').slice(1);
        let member = args.slice(0, 1).join(' ');
        con.query(`SELECT * FROM bans WHERE id=$member`, (err, rows) => 
            if (err) throw err;
            // console.log("check here "+member);
            let reason;
            reason = rows[0].reason;
            if(reason="undefined") return message.reply(`I did not find any users with that ID banned. You must check by user ID!`);
            if(reason) return message.reply(`I found the user banned for the reason **$reason**`);

我在这里迷路了。基本上,我需要它在数据库中查找项目。它使用命令+check(此处为id)将名为“id”的列与给定的列进行比较。然后,如果它找到一个,它会在 id 的同一行中提取“原因”。问题是,当运行 +check 但它没有找到与给定 ID 匹配的 ID 时,它会使 Discord 机器人崩溃并给出该错误。我抛出错误(我认为)。我对 mySQL 很陌生,如果这只是一个简单的错误,我很抱歉。提前致谢。

【问题讨论】:

您尝试过什么调试问题?如果发生该错误,rows 包含什么? 【参考方案1】:

你需要处理没有找到行的情况:

const row = rows[0];

if (row) 
  const  reason  = row;
  // rest of your code
 else 
  // no rows found

【讨论】:

这 100% 解决了我的问题。这也是我必须在这个机器人的一个关键组件中重用的东西。非常非常感谢!

以上是关于Discord.js 无法使用 mySQL 在数组中找到项目时出错的主要内容,如果未能解决你的问题,请参考以下文章

从函数中导出数据 [mysql, node.js, discord.js]

discord.js:随机化存储为 json 文件的数组内容

Discord.js,通过数组中的 ID 查找用户是不是具有角色

无法访问 discord.js 中的 user.presence.activities

嵌入上的 Discord.js 按钮

Discord.js - 创建一个数组来转储图像文件