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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/40985428/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 17:51:40  来源:igfitidea点击:

i am getting cannot read property 'query' of undefined

node.js

提问by Amina Rahman

i have make a socket.io chatroom and i am using some database queries to insert and select data but unfortunately i am getting some error of query

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

The code of the file on which i am getting error is as follow

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

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);
    });

};

and the error i am getting because of this code is

我因为这段代码而得到的错误是

The image of the error i am getting

我得到的错误图像

please can anyone help me regarding this issue

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

Thanks a lot Regards

非常感谢

回答by Adiii

It seems there is error in your mysql connection.try make proper connection first

您的 mysql 连接中似乎有错误。请先尝试进行正确的连接

Step 1: Create the pool (only do this once)

第 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
});

Step 2: Get a connection

第 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();
    }
});

check this for more detail https://youtu.be/2CeAnrCsBQo

检查此以获取更多详细信息https://youtu.be/2CeAnrCsBQo

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

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

回答by Abhishek Goel

Adding the following 2 parameters solved my problem

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

queueLimit
connectionLimit

queueLimit
connectionLimit

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

Note : Be careful, this might break your database.

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

回答by mscdex

You need to handle errors, otherwise you can encounter issues like this. Specifically in this case, you aren't checking if erris set in your pool.getConnection()callback. It is most likely set and is why you don't have a valid connectionobject.

你需要处理错误,否则你会遇到这样的问题。特别是在这种情况下,您不会检查回调中err是否设置了pool.getConnection()。它很可能已设置,这就是您没有有效connection对象的原因。