简体   繁体   English

Node.js在mysql查询中更改全局变量

[英]Nodejs change global variable inside mysql query

i'm trying to create a nodejs server but the following code is not working any advice? 我正在尝试创建一个nodejs服务器,但是以下代码没有任何建议?

var app = require('http').createServer();
var io = require('socket.io')(app);
var mysql = require('mysql');

var dblists = new Array();
pool=mysql.createPool({host : host,user : user,password: pass });   
pool.getConnection(function(err, connection){
    connection.query("use nodejs");
    connection.query('SELECT db_name,domain_name FROM tbl_dblist;',
    function (err, rows,f) {
        rows.forEach(function (entry) {
            dblists[entry["domain_name"]] = entry["db_name"];
        });
    });
});

console.log(dblists);   

Thanks in advance] The whole code: 预先感谢]整个代码:

var dblists = new Array();

app.listen(3000);
var xsocket = io.listen(app);
//console.log('Listen On Port 3000');
var pool=mysql.createPool({host : host,user : user,password: pass });   

pool.getConnection(function(err, connection){
    connection.query("use nodejs");
    connection.query('SELECT db_name,domain_name FROM tbl_dblist;',
    function (err, rows,f) {
        rows.forEach(function (entry) {
            dblists[entry["domain_name"]] = entry["db_name"];
        });
    });
});


xsocket.set('authorization', function (handshakeData, callback) {
    callback(null, true);
});


xsocket.on('connection', function (conn) {
    xsocket.emit('list',dblists);
});

getConnection is asynchronous, so your console.log fires before you get any values in your array. getConnection是异步的,因此在获取数组中的任何值之前会触发console.log

If you put the console.log inside the method, it will work as epxected: 如果将console.log放在方法中,它将按预期运行:

xsocket.on('connection', function (conn) {    
    pool.getConnection(function(err, connection){
        connection.query("use nodejs");
        connection.query('SELECT db_name,domain_name FROM tbl_dblist;',
        function (err, rows,f) {
            rows.forEach(function (entry) {
                dblists[entry["domain_name"]] = entry["db_name"];
            });
            xsocket.emit('list', dblists);
        });
    });        
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM