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

당신이 오류를 검사하지 않는 사실 외에 괜찮습니다. getAllEvents는 함수를 인수로 기대합니다. 지금

그것은 단순히 정확하지 않은 함수 프로토 타입의이 getAllEvents 볼

function getAllEvents(req, res, next) { 

을하자

function getAllEvents(callback) { 

같은 그런 다음 "콜백을 호출 할 수있을 것 있었어야 반환 "이 같은 결과는

return callback(null,data); 

또는 오류는 데이터베이스 연결 중에 발생한 경우, 콜백 절대적으로 완벽

return callback(err); 
+0

에 오류를 통과 당신에게 내가 잘못하고 있었는지의 설명을 주셔서 대단히 감사합니다. 오류 검사를 포함하여 제안한 변경 사항을 구현했습니다. 이것은 나에게 모두 새로운 것이므로 머리를 감싼다. 도와 주셔서 감사합니다! – Steve

+0

약속은 콜백으로 변환하는 대신 올바르게 사용하는 방법을 이해하는 것이 가장 좋습니다. –

관련 문제