我如何 return 我的数据来自一个函数?
How do I return my data from a function?
我已经编写了一个小型数据库函数,它从数据库中获取一些数据并将其转换为我想要的格式,但我无法返回数据以使用 Express 显示它。数据库函数如下:
function getAllEvents(req, res, next) {
db.any('select * from sensors, events where sensors.sensorid = events.sensorid')
.then(function (data) {
var final = [];
data.forEach(function(datas){
if (!final[datas.sensorid]){
final[datas.sensorid] = {};
}
if (!final[datas.sensorid].name){
final[datas.sensorid].name = datas.name;
final[datas.sensorid].signatures = {};
}
if (!final[datas.sensorid].signatures[datas.signature]){
final[datas.sensorid].signatures[datas.signature] = {};
final[datas.sensorid].signatures[datas.signature].id = "sen" + datas.sensorid + "sig" + datas.signature;
final[datas.sensorid].signatures[datas.signature].signature = datas.signature;
final[datas.sensorid].signatures[datas.signature].message = datas.message;
final[datas.sensorid].signatures[datas.signature].events = {};
}
final[datas.sensorid].signatures[datas.signature].events[datas.eventid] = datas;
})
return final;
})
.catch(function (err) {
console.log("Something went wrong! ", err)
});
}
调用它的路由器函数是这样的:
router.get('/events', function(req, res, next) {
db.getAllEvents(function(err, data){
res.render('events', { data: data });
});
});
我认为路由器功能正在无限期地等待数据,因为我没有收到任何错误,但页面从未加载。我做错了什么?
What am I doing wrong?
此代码:
router.get('/events', function(req, res, next) {
db.getAllEvents(function(err, data){
res.render('events', { data: data });
});
});
除了您没有检查错误之外,还可以。请注意,getAllEvents 需要一个函数作为参数。
现在让我们看看您的 getAllEvents 函数原型
function getAllEvents(req, res, next) {
根本不正确,应该是这样的
function getAllEvents(callback) {
然后你就可以调用回调和 "return" 这样的结果
return callback(null,data);
或者如果在数据库连接期间发生错误,则将错误传递给回调
return callback(err);
我已经编写了一个小型数据库函数,它从数据库中获取一些数据并将其转换为我想要的格式,但我无法返回数据以使用 Express 显示它。数据库函数如下:
function getAllEvents(req, res, next) {
db.any('select * from sensors, events where sensors.sensorid = events.sensorid')
.then(function (data) {
var final = [];
data.forEach(function(datas){
if (!final[datas.sensorid]){
final[datas.sensorid] = {};
}
if (!final[datas.sensorid].name){
final[datas.sensorid].name = datas.name;
final[datas.sensorid].signatures = {};
}
if (!final[datas.sensorid].signatures[datas.signature]){
final[datas.sensorid].signatures[datas.signature] = {};
final[datas.sensorid].signatures[datas.signature].id = "sen" + datas.sensorid + "sig" + datas.signature;
final[datas.sensorid].signatures[datas.signature].signature = datas.signature;
final[datas.sensorid].signatures[datas.signature].message = datas.message;
final[datas.sensorid].signatures[datas.signature].events = {};
}
final[datas.sensorid].signatures[datas.signature].events[datas.eventid] = datas;
})
return final;
})
.catch(function (err) {
console.log("Something went wrong! ", err)
});
}
调用它的路由器函数是这样的:
router.get('/events', function(req, res, next) {
db.getAllEvents(function(err, data){
res.render('events', { data: data });
});
});
我认为路由器功能正在无限期地等待数据,因为我没有收到任何错误,但页面从未加载。我做错了什么?
What am I doing wrong?
此代码:
router.get('/events', function(req, res, next) {
db.getAllEvents(function(err, data){
res.render('events', { data: data });
});
});
除了您没有检查错误之外,还可以。请注意,getAllEvents 需要一个函数作为参数。
现在让我们看看您的 getAllEvents 函数原型
function getAllEvents(req, res, next) {
根本不正确,应该是这样的
function getAllEvents(callback) {
然后你就可以调用回调和 "return" 这样的结果
return callback(null,data);
或者如果在数据库连接期间发生错误,则将错误传递给回调
return callback(err);