我有一个discord bot,我正在处理一个命令,该命令从mysql数据库中显示关于一个字符的信息(通过提供字符名)。它工作得很好,但如果我提供了一个数据库中不存在的名称,如!characterinfo asdasfefcdce
,则bot会崩溃。所以我的问题是如果我提供了一个错误的名称,如何防止它崩溃?
。希望你能理解我的意思。
代码如下:
const Discord = require('discord.js');
const mysql = require('mysql');
const {stripIndents} = require("common-tags");
const { prefix, token } = require('../config.json');
module.exports.run = async (bot, message, args, connection3) => {
if (message.content == '!characterinfo') {
return message.reply('provide a character name!');
}
const name = args[0];
connection3.query('SELECT * FROM characters WHERE name = ?', [name], function(err, results, rows) {
if (err) throw err;
const embed = new Discord.RichEmbed()
.setColor('RANDOM')
.setTitle('**Character Information**')
.addField('Nickname:', results[0].name)
.addField('Level:', results[0].level)
.setFooter(`test`)
.setTimestamp();
message.channel.send(embed);
});
}
module.exports.help = {
name: "characterinfo",
}
如果你需要我提供你更多的信息,让我知道。
感谢任何帮助!
机器人现在崩溃是因为在这一行
if (err) throw err;
您抛出了一个错误,以后不处理它,最简单的更改方法是用console.log或console.error替换throw
if (err) console.error(err);
或者您可以保留抛出并使用try/catch来包装代码。
try {
connection3.query('SELECT * FROM characters WHERE name = ?', [name], function (err, results, rows) {
if (err) throw err;
const embed = new Discord.RichEmbed()
.setColor('RANDOM')
.setTitle('**Character Information**')
.addField('Nickname:', results[0].name)
.addField('Level:', results[0].level)
.setFooter(`test`)
.setTimestamp();
message.channel.send(embed);
});
} catch(err) {
// Handle the error ...
console.log(err)
}
编辑:所以当查询没有找到结果时,错误实际上是来自结果数组中没有任何条目,所以这个解决方案应该可以工作。
在做其他事情之前,您应该检查是否有“结果”。
try {
connection3.query('SELECT * FROM characters WHERE name = ?', [name], function (err, results, rows) {
if (err) throw err;
if (!results[0]) return;
const embed = new Discord.RichEmbed()
.setColor('RANDOM')
.setTitle('**Character Information**')
.addField('Nickname:', results[0].name)
.addField('Level:', results[0].level)
.setFooter(`test`)
.setTimestamp();
message.channel.send(embed);
});
} catch(err) {
// Handle the error ...
console.log(err)
}