Javascript 如何从不同的node.js代码获取数据
我在db.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
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)
})
}
然后在youapp.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)
})
}
然后在youapp.js
中传入回调:
db_connection.asyncGetAllData(function(err, result{
if (err) reject(err);
else
{
//console.log(result);
}
})
您还可以调整asyncGetAllData
以返回一个承诺,这可能会让事情变得更美好。看一看。看一看。