使用mysql排名discord.js

时间:2018-01-18 02:05:36

标签: javascript mysql node.js discord.js

我想为我的不和谐机器人做一个等级我试过但是给出了错误"无法读取属性' map'未定义"



127.0.0.1



 我使用谷歌翻译来发帖,所以如果我在翻译中有任何错误,我很抱歉

2 个答案:

答案 0 :(得分:0)

您正在接收的错误消息

  

"无法阅读财产' map'未定义"

意味着在这个函数中

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

result2.xp未定义。

这通常意味着它不存在,mysql无法找到它,但是基于你的代码,也许你没有insertcreate { {1}}正确吗?它似乎缺少table值,这导致了问题。您应该检查数据库及其错误所在的值。

编辑:基于result2.xp是数组的注释。你应该遍历数组,获取xp值并将它们存储在另一个数组中,然后对其进行排序。

答案 1 :(得分:0)

@RaymondZhang在他的回答中指出,你的错误发生在这一行:

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

在您对该答案的评论中,您说result2[0].xp未定义, aka 已定义,这让我觉得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)
            });
        }
    });
}