Discord.js V14随机猫图命令报错及数据异常求助
问题修复方案
第一个错误原因及解决
你遇到的TypeError: Cannot read properties of undefined (reading 'setTitle')是因为链式调用被打断:
const embed = new EmbedBuilder() console.log(res.data) // 该行返回undefined,导致后续`.setTitle()`在undefined上执行 .setTitle("Random Cat Image")
console.log()的返回值是undefined,相当于在undefined上调用.setTitle(),因此报错。解决方法是将console.log移至链式调用之外,避免打断方法链。
第二个错误原因及解决
接口返回的数据是数组格式(外层包裹[]),res.data是包含单个对象的数组,而非直接的对象。直接访问res.data.url自然会得到undefined,正确做法是取数组第一个元素后再访问url:res.data[0].url。
修复后的完整代码
axios.get("https://api.thecatapi.com/v1/images/search") .then((res) => { // 获取数组中的第一个猫图对象 const catData = res.data[0]; // 正确链式调用创建Embed const embed = new EmbedBuilder() .setTitle("Random Cat Image") .setImage(catData.url); console.log(catData); // 移至此处,不打断链式调用 message.reply({ embeds: [embed] }); }) .catch((err) => { const error = String(err); message.reply(`An error occurred, sorry about that. Try again in a moment. Error: ${error}. :face_with_monocle: `); });
额外建议:在使用接口返回数据前增加空值判断,避免因接口返回异常导致报错:
if (!res.data || res.data.length === 0) { return message.reply("Failed to get cat image, try again later."); }
内容的提问来源于stack exchange,提问作者Tyler Mazur
相关产品推荐
相关产品推荐

