0
DBからデータを取得し、それを私が望む形式にする小さなデータベース関数を書いたが、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 });
});
});
私はエラーを取得していないが、とてもルータ機能は、データを無期限に待機していると思いますページは決して読み込まれません。私は間違って何をしていますか?
にエラーを渡す発生した場合、私は間違って何をやっていたの説明のためにどうもありがとうございました。私はあなたがエラーチェックを含む提案した変更を実装しました。これは私には全く新しいものなので、私はまだそれの周りに私の頭をラッピングしています。助けてくれてありがとう! – Steve
ベストは、約束をコールバックに変換するのではなく、正しく使用する方法を理解することです。 –