2016-12-17 14 views
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 }); 
    }); 
}); 

私はエラーを取得していないが、とてもルータ機能は、データを無期限に待機していると思いますページは決して読み込まれません。私は間違って何をしていますか?

答えて

1

私は間違っていますか?

このコード:

router.get('/events', function(req, res, next) { 
    db.getAllEvents(function(err, data){ 
     res.render('events', { data: data }); 
    }); 
}); 

は、あなたがエラーをチェックされていないという事実以外にもokです。 getAllEventsが関数を引数として受け取っていることに注目してください。

今 "それは単に正しくない。そして、あなたがコールバックを呼び出すことができるだろう

function getAllEvents(callback) { 

のようなものとなっているはずのあなたのgetAllEvents関数プロトタイプ

function getAllEvents(req, res, next) { 

を見てみましょうとこのような結果を返す

return callback(null,data); 

またはエラーがあなたの中にデータベース接続が完璧だコールバック

return callback(err); 
+0

にエラーを渡す発生した場合、私は間違って何をやっていたの説明のためにどうもありがとうございました。私はあなたがエラーチェックを含む提案した変更を実装しました。これは私には全く新しいものなので、私はまだそれの周りに私の頭をラッピングしています。助けてくれてありがとう! – Steve

+0

ベストは、約束をコールバックに変換するのではなく、正しく使用する方法を理解することです。 –

関連する問題