如何返回Node.js mysql查询连接的响应

如何返回Node.js mysql查询连接的响应,mysql,node.js,Mysql,Node.js,我是Node.js的新手,我想使用selectquery从数据库中查找一些内容。 这是我的密码 var address = socket.request.client._peername.address; var ip_addrss = address.split("::ffff:"); let mine = ip_addrss[1]; var location = iplocation_find(mine); connection.connect( fun

我是Node.js的新手,我想使用selectquery从数据库中查找一些内容。 这是我的密码

var address = socket.request.client._peername.address;
    var ip_addrss = address.split("::ffff:");
    let mine = ip_addrss[1];

    var location = iplocation_find(mine);


    connection.connect( function () {
        // insert user data with IP, location --- has got a status.
        let stranger = "";
        var values = [];
        if (mine == null){
            mine = "local server";
        }
        values.push(mine);
        values.push('location');
        var sql = "INSERT INTO user_list (IP_address, location) VALUES (?)";
        connection.query(sql, [values], function (err, res){
            if (err) throw err;
        });

        // control chatting connection between users
        connection.query("SELECT IP_address FROM user_list WHERE status = ? AND location = ?", [0, "location"], function (err, res){
            if (err) throw err;
            stranger = res[0].IP_address;
            console.log(stranger);
        });
        var room_users = [];
        room_users.push(mine);
        room_users.push(stranger);
        console.log(room_users);
        connection.query("INSERT INTO chatting_status (IP_client_1, IP_client_2) VALUES (?)", [room_users], function (err, res){
            if (err) throw err;
            console.log('inserted');
        });
    });
现在的问题是“陌生人”。它不再工作了。总是空的。 请告诉我如何在mysql查询语句中返回值

在我的控制台上,显示了这一点

[ 'local server', '' ]
127.0.0.1
inserted
[ '192.168.1.100', '' ]
127.0.0.1
inserted

上面的“本地服务器”和“192.168.1.100”是我的值。“127.0.0.1”也是查询中的值。但是在查询之外,它只是空的。

您正在对
.connect()
.query()
调用使用异步操作。要使用这样的异步回调对代码进行排序,您必须在回调中继续控制流,然后通过回调传递回错误或结果

你可以这样做:

let address = socket.request.client._peername.address;
let ip_addrss = address.split("::ffff:");
let mine = ip_addrss[1];

let location = iplocation_find(mine);

function run(callback) {

    connection.connect( function () {
        // insert user data with IP, location --- has got a status.
        let values = [];
        if (mine == null){
            mine = "local server";
        }
        values.push(mine);
        values.push('location');
        var sql = "INSERT INTO user_list (IP_address, location) VALUES (?)";
        connection.query(sql, [values], function (err, res){
            if (err) return callback(err);

            // control chatting connection between users
            connection.query("SELECT IP_address FROM user_list WHERE status = ? AND location = ?", [0, "location"], function (err, res){
                if (err) return callback(err);

                let stranger = res[0].IP_address;
                console.log(stranger);

                let room_users = [];
                room_users.push(mine);
                room_users.push(stranger);
                console.log(room_users);
                connection.query("INSERT INTO chatting_status (IP_client_1, IP_client_2) VALUES (?)", [room_users], function (err, res){
                    if (err) return callback(err);

                    console.log('inserted');
                    callback(null, {stranger: stranger, room_users: room_users});
                });
            });
        });
    });
}

run((err, result) => {
    if (err) {
        console.error(err);
    } else {
        console.log(result);
    }
});

就个人而言,这种不断嵌套的回调代码是使用普通回调编写顺序异步代码的一个缺点。我更喜欢使用promise接口访问数据库,并使用
async/await
编写基于promise的代码,这将允许您编写更线性的代码