如何从不同的node.js代码获取数据

我有一个db.js中的代码片段如下,

exports.asyncGetAllData = function () { connection.connect(function(err) { connection.query(sqlGetAllData, function (err, result) { if (err) reject(err); else { //console.log(result); } }); }); }; 

我想在下面的app.js中调用函数的时候得到结果数据。

  app.get('/test/getPriceTrend', function(req, res) { console.log('SERVER::getPriceTrend'); console.log(req.url); var data = db_connection.asyncGetAllData(); //data is undefined console.log(data); res.setHeader('Accept', 'application/json'); res.writeHead(res.statusCode); //The following piece of code will send information from the database res.write(JSON.stringify({"hello":"world"})); res.end(); }); 

正如你所看到的,当我试图从db.js中获取数据时,它在控制台窗口中显示“数据未定义”。 我该如何解决这个问题? 任何build议?

提前致谢,

最简单的方法是创build一个传递给asyncGetAllData()的callback函数,

你的function看起来更像这样:

  exports.asyncGetAllData = function (callback) { connection.connect(function(err) { connection.query(sqlGetAllData, callback) }) } 

然后在你的app.js传递callback:

 db_connection.asyncGetAllData(function(err, result{ if (err) reject(err); else { //console.log(result); } }) 

你也可以调整asyncGetAllData来返回一个承诺,这可能会使事情变得更漂亮。

看起来你正在使用asynchronous方法调用数据,而不是等待响应。

 var data = db_connection.asyncGetAllData(); //data is undefined console.log(data); 

要么使用一个函数,让你SyncData或使用callback如下:

  exports.asyncGetAllData = function (cb) { connection.connect(function(err) { connection.query(sqlGetAllData, function (err, result) { if (err) reject(err); else { //console.log(result); cb(data); } }); }); }; var data = db_connection.asyncGetAllData(function(data) { console.log(data); res.write(JSON.stringify(data)); res.end(); });