javascript - D.JS MYSQL 行问题
问题描述
尝试将拉取的查询推送到 MessageEmbed 时遇到问题,它将 ID 推送得很好,但查询的所有其他部分都没有推送到消息并导致致命错误,不确定在多次搜索后继续修复它和试图解决它的视频。目标是当 -pulluser @user 运行时,它将用户 ID、XP、Perm 和 Rank 推送到消息嵌入。
这是代码:
const { MessageEmbed } = require(`discord.js`)
const reply = require(`../../settings/reply`)
const { createConnection } = require(`mysql`)
const mysql = require(`../../settings/mysql.js`)
const perms = require("../../settings/perms")
module.exports = {
name: 'pulluser',
callback: async (client, message, args) => {
let member = message.guild.member(message.mentions.users.first() || message.guild.members.cache.get(args[0]))
let con = createConnection(mysql.conInfo)
con.query(`SELECT * FROM users WHERE ID = ${member.id}`, (err, rows) => {
let di = rows[0].ID
let xp = rows[1].XP
let prm = rows[2].Perm
let rnk = rows[3].Rank
const pUser = new MessageEmbed()
.setTitle(`Pulled User ${member}`)
.setColor("#ff1001")
.setDescription(`USER INFO: ID: ${di}`)
.addField(`EXP: ${xp}`)
.addField(`PERMISSION LEVEL: ${prm}`)
.addField(`RANK: ${rnk}`)
.setFooter(reply.footer.foot)
message.channel.send(pUser)
})
}
}
我得到的错误是 TypeError: Cannot read property 'XP' of undefined。它对 ID 之后的所有行请求执行此操作。不确定如何继续尝试让所有行都出现在消息中。
解决方案
返回结果的变量row
是Array。因此,如果您的数据库返回多个结果,那么您可以像row[0]
, row[2]
...一样使用它row[99]
(取决于您的数据库返回的结果数量)。
在这种情况下,您会收到错误:
TypeError:无法读取未定义的属性“XP”
这意味着您的数据库没有返回足够的行以便您使用结果中的第二行或第三行。长话短说:
将row[1]
, row[2]
,row[3]
替换为row[0]
。
let di = rows[0].ID
let xp = rows[0].XP
let prm = rows[0].Perm
let rnk = rows[0].Rank
为了了解发生了什么,我做了一个小演示。下面你会发现一个只有 1 个数组项,第二个演示将向你展示如果你的数组中有多个结果会发生什么。
const results = [
{"ID": "1", "XP": "100", "Perm": 0, "Rank": "Rank 1"}
];
console.log(results[0].ID); // Returns "1"
console.log(results[1].XP); // Returns "undefined"
console.log(results[2].Perm); // Returns "undefined"
console.log(results[3].Rank); // Returns "undefined"
多行:
// Example with multiple rows
const results = [
{"ID": "1", "XP": "100", "Perm": 1, "Rank": "Rank 1"},
{"ID": "2", "XP": "110", "Perm": 2, "Rank": "Rank 2"},
{"ID": "3", "XP": "120", "Perm": 3, "Rank": "Rank 3"},
{"ID": "4", "XP": "130", "Perm": 3, "Rank": "Rank 4"}
];
console.log(results[0].ID); // Returns "1" (First item in 'results')
console.log(results[1].XP); // Returns "110" (Because this is the second array item in 'results')
console.log(results[2].Perm); // Returns "3" (Because this is the third array item in 'results')
console.log(results[3].Rank); // Returns "Rank 4" (Because this is the forth array item in 'results')
推荐阅读
- sql - Oracle/SQL 查找日期或最接近指定日期的日期
- python - 反转字典的层次结构的有效方法?
- javascript - 值设置为 0,但仍返回为 NaN
- airflow - 如何在 Google Cloud Composer 中检索服务帐户电子邮件和密钥文件?
- clips - CLIPS 如何根据 deftemplate 关系槽查找事实
- django - Django 2.2:为多个数据库创建模型
- azure-machine-learning-service - 数据漂移笔记本的问题
- javascript - 选择所有具有名称属性的输入包含子字符串 - jQuery
- sql-server - 如何防止 NULL 在 Dataframe 中导致错误的数据类型?
- java - javax.servlet.http.HttpServlet 中有没有办法确定在运行时调用哪个方法