类型错误: 无法读取未定义的属性'exp'



我在javascript代码中使用sqlite作为数据库,无论我尝试什么,它总是在那里保留此错误:

sql.get(`SELECT * FROM users WHERE userId ="${member.user.id}"`).then(row => {
if (!row) sql.run("INSERT INTO users (userId, level, exp) VALUES (?, ?, ?)", [member.user.id, 1, 0]);
var profile = new Discord.RichEmbed()
.setColor(0x0000FF)
.setTitle(member.user.username + "'s profile")
.setThumbnail(member.user.avatarURL)
.setDescription("Status: " + member.user.presence.status)
.addField("Stats","**Level** " + row.level+"n"+row.exp+"/"+row.level*10)
msg.reply("here is "+member.user.username+"'s profile:",{embed:profile});
})

如果您没有理解其中一些,例如"msg.reply",那是因为这些是我的 Discord 机器人的命令。

看起来您的对象行未定义。

将所有代码包装在 else 大括号内:

sql.get(`SELECT * FROM users WHERE userId ="${member.user.id}"`).then(row => {
if (!row) 
sql.run("INSERT INTO users (userId, level, exp) VALUES (?, ?, ?)", [member.user.id, 1, 0]);
else {
var profile = new Discord.RichEmbed()
.setColor(0x0000FF)
.setTitle(member.user.username + "'s profile")
.setThumbnail(member.user.avatarURL)
.setDescription("Status: " + member.user.presence.status)
.addField("Stats","**Level** " + row.level+"n"+row.exp+"/"+row.level*10)
msg.reply("here is "+member.user.username+"'s profile:",{embed:profile});
}
})

在您的代码中,如果该行不存在,则插入该行,但始终对其进行处理。 如果未定义,则应插入它,然后再次获取该行,现在对其进行处理。

试试这个,

sql.get(`SELECT * FROM users WHERE userId ="${member.user.id}"`).then(row => {
if(row) {
reply(row, member);
} else {
sql.run("INSERT INTO users (userId, level, exp) VALUES (?, ?, ?)", [member.user.id, 1, 0]).then(row => {
reply(row, member);
})
}
})
const reply = (row, member) => {
var profile = new Discord.RichEmbed()
.setColor(0x0000FF)
.setTitle(member.user.username + "'s profile")
.setThumbnail(member.user.avatarURL)
.setDescription("Status: " + member.user.presence.status)
.addField("Stats","**Level** " + row.level+"n"+row.exp+"/"+row.level*10)
msg.reply("here is "+member.user.username+"'s profile:",{embed:profile});
}

最新更新