我无法读取未定义的属性“查询”

问题描述 投票:0回答:6

我做了一个socket.io聊天室,我正在使用一些数据库查询来插入和选择数据,但不幸的是我遇到了一些查询错误

我收到错误的文件的代码如下

var rooms = [];
module.exports.getUserFeeds = function (chatpage, socket, io, pool,async)
{
    socket.on('senddata', function (data)
    {
        socket.user_id = data.user_id;
        socket.room_id=data.room_id;
        socket.room = 'room' + data.room_id;
        rooms['room' + data.room_id] = 'room' + data.room_id;
        socket.join('room' + data.room_id);
        pool.getConnection(function (err, connection)
        {
             async.parallel([
                function(callback)
                {
                    connection.query('SELECT user_id,username FROM chat_users where user_id=' + data.user_id + '', function (error1, userdata)
                    {
                         if (error1) return callback(error1);
                         callback(null, userdata);
                    });
                },
                function (callback)
                {
                    if(data.user_id)
                    connection.query('SELECT user_id,username FROM chat_users', function (error3, memdata)
                    {
                        if (error3) return callback(error3);
                        callback(null, memdata);
                    });
                    else
                        callback(null,null);
                },
                function(callback)
                {
                    if(data.user_id)
                    connection.query('SELECT comment_id,comment,chat_users.user_id,username,comments.added FROM comments INNER JOIN chat_users ON comments.user_id=chat_users.user_id',function(error4,converdata){
                        if (error4) return callback(error4);
                        callback(null, converdata);
                    });
                    else
                        callback(null,null);
                }
             ], function (err, results)
                {
                    if(err) throw err;
                    socket.emit('chatdata',
                    {
                        memdata:results[1],
                        converdata:results[2],
                    });
                    socket.broadcast.to('room'+ data.room_id +'').emit('newuser', {userdata:results[0]});
                    connection.release();
                });
        });
    });

    socket.on('sendcomment', function (data)
    {
        pool.getConnection(function (err, connection)
        {
            connection.query('INSERT INTO comments (user_id,comment,added) VALUES (' + data.user_id + ',"' + data.msg + '","' + data.datetime + '")', function (err, result)
            {
                if (err) throw err;
                async.parallel([
                    function (callback)
                    {
                        connection.query('SELECT comments.*,username,comments.added from comments JOIN chat_users ON comments.user_id=chat_users.user_id WHERE comments.comment_id=' + result.insertId + '', function (err2, comments)
                        {
                            if (err2) return callback(err2);
                            callback(null, comments);
                        });
                    },
                    function (callback)
                    {
                        connection.query('SELECT count(comment_id) as tot_comment  from comments', function (err3, comment_count)
                        {
                            if (err3) return callback(err3);
                            callback(null, comment_count);
                        });
                    },
                    ], function (err, results)
                    {
                        if (err) throw err;
                        if (results[0])
                        {
                            chatpage. in('room'+ data.room_id +'').emit('showcomment',
                            {
                                room_comment: results[0],
                                comment_count: results[1]
                            });
                        }
                        connection.release();
                    }); 
            });
        });
    });
    socket.on('disconnect', function ()
    {
        console.log("user disconnected");
        pool.getConnection(function (err, connection)
        {
            connection.query('DELETE from chat_users where user_id='+socket.user_id+'', function (err, removeuser)
            {
                if (err) throw err;
            });
            connection.query('DELETE from comments where user_id='+socket.user_id+'', function (err, removecomments)
            {
                if (err) throw err;
            });
            connection.release();
        });
        socket.broadcast.to('room'+ socket.room_id +'').emit('removeuser', {user_id:socket.user_id});
        socket.leave(socket.room);
    });

};

由于这段代码我得到的错误是

我收到的错误图像

请任何人可以帮助我解决这个问题

非常感谢 问候

node.js
6个回答
9
投票

您的mysql连接似乎有错误。请先尝试建立正确的连接

第 1 步:创建池(仅执行一次)

var mysql = require('mysql');
var pool = mysql.createPool({
    host            : 'hostname',
    user            : 'username',
    password        : 'password',
    database        : 'db_name',
    connectionLimit : 10,               // this is the max number of connections before your pool starts waiting for a release
    multipleStatements : true           // I like this because it helps prevent nested sql statements, it can be buggy though, so be careful
});

第 2 步:建立连接

pool.getConnection(function (err, conn) {
    if (err)
        return res.send(400);

    // if you got a connection...
    conn.query('SELECT * FROM table WHERE id=? AND name=?', [id, name], function(err, rows) {
        if(err) {
            conn.release();
            return res.send(400, 'Couldnt get a connection');
        }

        // for simplicity, just send the rows
        res.send(rows);

        // CLOSE THE CONNECTION
        conn.release();
    }
});

查看更多详细信息https://youtu.be/2CeAnrCsBQo

http://fearby.com/article/how-to-setup-pooled-mysql-connections-in-node-js-that-dont-disconnect/


1
投票

添加以下2个参数解决了我的问题

队列限制
连接限制

exports.pool = mysqlCon.createPool({
    host: host,
    user: user,
    port: 3306,
    password: pass,
    database: db,
    queueLimit : 0, // unlimited queueing
    connectionLimit : 0 // unlimited connections 
});

注意:小心,这可能会破坏您的数据库。


0
投票

mysql> 更改用户 'root'@'localhost' 通过 mysql_native_password BY '< MySQL password >' 进行识别;

mysql> 刷新权限;


0
投票

通过使用 mysql2 而不是 mysql 解决了我的问题


0
投票

我也遇到了这个错误。这是因为我托管 MySQL 的服务器已关闭,并且在查询数据库时未建立连接。当我重新启动服务器后,一切就都设置好了。


-1
投票

你需要处理错误,否则你可能会遇到这样的问题。具体来说,在这种情况下,您不会检查

err
回调中是否设置了
pool.getConnection()
。它很可能已设置,这就是为什么您没有有效的
connection
对象。

© www.soinside.com 2019 - 2024. All rights reserved.