【问题标题】:Array returning undefined when it should return something else?当它应该返回其他东西时返回未定义的数组?
【发布时间】:2026-02-24 03:15:01
【问题描述】:

我正在为查询而苦苦挣扎。我一直在搜索很多,我发现的唯一相关帖子没有答案。

row[0] 返回未定义,我似乎无法找出原因..

信息:

如前所述,logger.warn(rows[0]) 返回undefined

rows.length 返回0

logger.warn(pool.escape(hash)) 返回正确的哈希值(与 DB 相同)

logger.warn(rows[0].hash) 返回undefined

这是控制台/日志文件中的错误:TypeError: Cannot read property 'hash' of undefined

socket.on('hash', function(hash) {
        query('SELECT * FROM `members` WHERE `hash` = '+pool.escape(hash),
    function(err, rows) { 
            logger.warn(rows[0]) // returns "undefined"
            if((err) || (!rows.length)) return socket.disconnect();
    }

编辑:查询功能

function query(sql, callback) {
if (typeof callback === 'undefined') {
    callback = function() {};
}
pool.getConnection(function(err, connection) {
    if(err) return callback(err);
    logger.info('DB Connection ID: '+connection.threadId);
    connection.query(sql, function(err, rows) {
        if(err) return callback(err);
        connection.release();
        return callback(null, rows);
    });
});

}

编辑:调试日志

https://gyazo.com/858796b81c674ba816f974039eea1c09

编辑:断开连接时

socket.on('disconnect', function() {
        logger.warn('Socket disconnect');
        io.sockets.emit('message', {
            type: 'logins',
            count: Object.size(io.sockets.connected)
        });
        delete users[user.email];
    })

【问题讨论】:

  • 什么是哈希?似乎哈希是未定义的。
  • hash事件的广播过程中,你在发送哈希吗?
  • Hash 已定义,并返回正确的值。 @Jiro90 编辑: 是的@RIYAJKHAN,我是,那部分工作正常。
  • 什么是queryhash 是数字吗?
  • @robertklep,对不起,我没有包括在内。现在编辑帖子。哈希是一个电子邮件地址。 test@mail.com 返回test%40mail.com

标签: javascript mysql database web socket.io


【解决方案1】:

看日志,客户端好像是这样发送hash事件值的:test%40mail.com

但是,正如您在评论中所述,数据库中的值存储为:test@mail.com

这意味着在运行查询之前,您需要对哈希值进行 URI 转义,然后对其进行 SQL 转义,然后再将其传递给数据库:

socket.on("hash", function(hash) {
  hash = pool.escape(decodeURIComponent(hash));
  query("SELECT * FROM `members` WHERE `hash` = " + hash, function(err, rows) {
    ...
  });
});

【讨论】: