【问题标题】:rank discord.js using mysql使用 mysql 对 discord.js 进行排名
【发布时间】:2018-06-27 00:31:54
【问题描述】:

我想为我尝试过的不和谐机器人排名,但给出了错误“无法读取未定义的属性'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)
            });
        }
    });
}
这篇文章是我用谷歌翻译的,如有翻译错误,请见谅

【问题讨论】:

    标签: javascript mysql node.js discord.js


    【解决方案1】:

    您收到的错误消息

    “无法读取未定义的属性'map'”

    这里的意思是这个函数

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

    result2.xp 未定义。

    这通常意味着它不存在,mysql 找不到它,但根据你的代码,也许你没有正确地insertcreatetable?它似乎缺少 result2.xp 值,这导致了问题。您应该检查错误所在的数据库及其值。

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

    【讨论】:

    • 如果我把result2 [0] .xp 没有出现indifined,但这只是得到1 结果,所以我尝试使用resul2.xp 来获取所有结果并排序
    • 但是数组本身没有属性.xp 只有数组中的值对吗?
    【解决方案2】:

    正如@RaymondZhang 在他的回答中指出的那样,您的错误是从这一行发生的:

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

    在您对该答案的 cmets 中,您说 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)
                });
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      相关资源
      最近更新 更多