使用mysql排列discord.js

nbysray5  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(374)

我想为我的discord机器人做一个排名,我试过了,但给出了错误“无法读取未定义的属性‘map’”

var dados = require("../create-table");
const mysql = require('mysql');
const sequelize = require('sequelize');
const connection = mysql.createConnection({
  host     : 'myhost',
  port     : '3306',
  user     : 'myuser
  password : 'mypassword',
  database : 'mydatabase',
  charset : 'utf8mb4'
});

exports.run = (client, message, args)  => {
    connection.query(`SELECT * FROM guildn WHERE id = '${message.guild.id}'`, function (err, result) {
        if (err) {
            return console.log('Error1');
        }
        if (result.length){
            connection.query(`SELECT * FROM level WHERE guild = '${message.guild.id}'`, function (err, result2) {
                if(err) {
                    return console.log('Error1');
                }
                var sla = result2.xp.map(function(a){

                })
                sla.sort(function(a, b) {
                    return a - b;
                });
                console.log(sla)
            });
        }
    });
}

我用谷歌翻译了这篇文章,所以如果我在翻译中有任何错误,我很抱歉

xv8emn3q

xv8emn3q1#

正如@raymondzhang在他的回答中指出的,你的错误就发生在这一行:

var sla = result2.xp.map(function(a) { ... })

在你对这个答案的评论中,你说 result2[0].xp 不是未定义的,也就是已定义的,这让我思考 result2 是一个如下所示的数组:

[
    { xp: <string1, object1, or function1> },
    { xp: <string2, object2, of function2> },
    ...
]

如果这是真的,你可能正在寻找一个 map 功能如下:

var sla = result2.map(function(a) {
    return a.xp;
});

您可以将其简化为:

var sla = result2.map(a => a.xp);

将其放回代码中,您的原始代码如下所示:

... initialize variables
exports.run = (client, message, args)  => {
    connection.query(`SELECT * FROM guildn WHERE id = '${message.guild.id}'`, function (err, result) {
        if (err) {
            return console.log('Error1');
        }
        if (result.length){
            connection.query(`SELECT * FROM level WHERE guild = '${message.guild.id}'`, function (err, result2) {
                if(err) {
                    return console.log('Error1');
                }
                var sla = result2.map(function(a) {
                    return a.xp;
                });
                sla.sort(function(a, b) {
                    return a - b;
                });
                console.log(sla)
            });
        }
    });
}
uttx8gqw

uttx8gqw2#

您收到的错误消息
“无法读取未定义的属性'map'”
意思是在这个函数中
var sla = result2.xp.map(function(a){}) result2.xp 未定义。
这通常意味着它不存在,mysql找不到它,但是根据你的代码,也许你没有 insert 或者 create 这个 table 正确地?好像少了一个 result2.xp 价值,这是导致问题的原因。您应该检查您的数据库及其将出现错误的值。
编辑:基于 result2 是一个数组。您应该循环遍历数组,获取xp值并将它们存储在另一个数组中,然后对其进行排序。

相关问题