Javascript 将node.js-mysql结果返回到函数

Javascript 将node.js-mysql结果返回到函数,javascript,json,node.js,socket.io,node-mysql,Javascript,Json,Node.js,Socket.io,Node Mysql,我有两个node.js文件:server.js和database.js。我希望我的socket.io在server.js中发出,数据库查询在database.js中发出。Server.js: // init io.sockets.on('connection', function(socket) { initdb = db.initdb(); console.log(initdb) }); My database.js基本上包含以下代码: function query(quer

我有两个node.js文件:server.js和database.js。我希望我的socket.io在server.js中发出,数据库查询在database.js中发出。Server.js:

// init
io.sockets.on('connection', function(socket) {
    initdb = db.initdb();
    console.log(initdb)
});
My database.js基本上包含以下代码:

function query(queryString) {
    connection = mysql.createConnection({
        host: '12.23.45.67',
        user: 'user',
        password: 'password',
        database: 'database'
    });

    connection.connect();

    var res = connection.query(queryString, function(err, rows, fields) {
        if (err) throw err;
    });

    connection.end();
}


// export initdb for external usage by server.js
exports.initdb = function() {
    var initdb = query("SELECT * FROM columns;");
};

我的问题是希望connection.query函数中的rows对象返回到initdb函数。但是,我可以记录此对象的唯一位置是在该函数中。如何传递查询结果以便从server.js发送JSON对象?

记住节点是异步的。因此,在大多数情况下,您通过回调而不是作为函数的返回值获取数据

您需要将回调链接到查询发生的位置,例如:

// in database.js
exports.initdb = function(cb) {
  query("SELECT * FROM columns", cb)
}

function query(queryString, cb) {
  // .. stuff omitted

  var res = connection.query(queryString, function(err, rows, fields) {
    connection.end();
    if (err) return cb(err);
    cb(null,rows);
  });

// in server.js
io.sockets.on('connection', function(socket) {
  db.initdb(function(err,rows) {
    if (err) {
      // do something with the error
    } else {
      console.log(rows)
    }
  });
});

回调函数将包含两个参数err和rows。您的server.js代码需要检查err的值并相应地执行操作,否则它会有行。

记住节点是异步的。因此,在大多数情况下,您通过回调而不是作为函数的返回值获取数据

您需要将回调链接到查询发生的位置,例如:

// in database.js
exports.initdb = function(cb) {
  query("SELECT * FROM columns", cb)
}

function query(queryString, cb) {
  // .. stuff omitted

  var res = connection.query(queryString, function(err, rows, fields) {
    connection.end();
    if (err) return cb(err);
    cb(null,rows);
  });

// in server.js
io.sockets.on('connection', function(socket) {
  db.initdb(function(err,rows) {
    if (err) {
      // do something with the error
    } else {
      console.log(rows)
    }
  });
});

回调函数将包含两个参数err和rows。您的server.js代码需要检查err的值并相应地执行操作,否则它会有行。

这是我的第一个node.js项目。没有得到这个重要的部分。非常感谢你的合作!当然可以。我们都去过那里如果你只是在学习,你可能会在我正在做的一系列电影中发现一些价值。无论你是否检查,快乐编码!这是我的第一个node.js项目。没有得到这个重要的部分。非常感谢你的合作!当然可以。我们都去过那里如果你只是在学习,你可能会在我正在做的一系列电影中发现一些价值。无论你是否检查,快乐编码!