将node.js-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) }); 

我的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函数内的行对象返回到我的initdb函数。 但是,我可以login这个对象的唯一的地方是在这个函数中。 我怎样才能传递查询结果,所以我可以从server.js发出JSON对象呢?

请记住,节点是asynchronous的。 因此,大部分情况下,您通过callback而不是返回值函数返回数据。

您需要将callback链接到发生查询的位置,如下所示:

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

callback将是一个函数,需要2个参数, errrows 。 你的server.js代码将需要检查err的值,并相应地采取行动,否则将有rows