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

Javascript 如何从不同的node.js代码获取数据,javascript,node.js,rest,Javascript,Node.js,Rest,我在db.js中有一个代码片段,如下所示 exports.asyncGetAllData = function () { connection.connect(function(err) { connection.query(sqlGetAllData, function (err, result) { if (err) reject(err); else

我在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获取数据时,控制台窗口显示“数据未定义”。我如何解决这个问题?有什么建议吗


提前感谢,

看起来您正在使用异步方法调用数据,而不是等待响应

var data = db_connection.asyncGetAllData(); //data is undefined
console.log(data);
使用可获取SyncData的函数或使用回调,如中所示:

   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();

});

看起来您正在使用异步方法调用数据,而不是等待响应

var data = db_connection.asyncGetAllData(); //data is undefined
console.log(data);
使用可获取SyncData的函数或使用回调,如中所示:

   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();

});

最简单的方法是创建一个回调函数,传递给
asyncGetAllData()

您的函数看起来更像这样:

 exports.asyncGetAllData = function (callback) {
    connection.connect(function(err) {
        connection.query(sqlGetAllData, callback)
    })
}
然后在you
app.js
中传入回调:

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

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

最简单的方法是创建一个回调函数,传递给
asyncGetAllData()

您的函数看起来更像这样:

 exports.asyncGetAllData = function (callback) {
    connection.connect(function(err) {
        connection.query(sqlGetAllData, callback)
    })
}
然后在you
app.js
中传入回调:

db_connection.asyncGetAllData(function(err, result{
     if (err) reject(err);
     else
     {
             //console.log(result);
     }
})
您还可以调整
asyncGetAllData
以返回一个承诺,这可能会让事情变得更美好。

看一看。看一看。