2016-11-25 4 views
1

내 NodeJS 백엔드에서 나는 sqlite 데이터베이스에서 값을 가져오고 프론트 엔드로 보내고 싶지만 항상 말합니다. Object { msg: false } 내가 필요하다고 생각합니다 함수의 동기 호출을 할 수있는 함수. 내 코드 :nodejs 동기 호출 : DB 콜백 가져 오기 및 프론트 엔드로 구문 분석

router.get('/', function(req, res, err){ 
    var msg = " "; 
    var uid = req.session.user; 

    function printMsg(message){ 
     msg = message; 
    } 
    db.getMsg(uid, printMsg); 
    if(err){ 
      res.send({msg : "No message available"}); 
     } else{ 
      res.send({msg: msg}) 
     } 
}); 

아무도 도와 줄 수 있습니까? 미리 감사드립니다. 내가 db.getMsg 가정

+0

중복 : http://stackoverflow.com/questions/6898779/how-to-write-asynchronous-functions-for-node-js – iKoala

답변

2

오류를 명중하고 콜백 메시지를 반환하면 성공

router.get('/', function(req, res, err){ 
    try { 
     var uid = req.session.user; 

     db.getMsg(uid, function(msg) { 
     if (msg) res.send({msg: msg}) 
     else res.send({msg : "No message available"}); 
     }} 
    } catch (error) { 
     res.send({error: error.toString() }); 
    } 
}); 
기능은 다음과 같이 정의한다()

귀하의 db.getMsg가

function getMsg(uid, callback){ 
// your logic 
var resultFromDb = ''; // Contents from db. 

if(not success){ // If that fails 
    err = //define error object 
    callback(err) // Call the callback function only with an error. 
} 
else{ 
    callback(undefined, resultFromDb) // else, call the callback function with an 
          // undefined value for the error.  
    } 
} 
다음
+0

msg를 전역 변수에 저장하려면 어떻게해야합니까? 왜냐하면 db.get 함수에서만 작동하는 msg를 편집하고 싶습니다.하지만 db.get 함수 외부에서 편집하고 싶습니다. – nolags

+0

전역 변수에 아무것도 설정하지 않으려면 db.setMsg (newMsg)에서 수행하고 동일한 db.getMsg를 사용하여 검색하는 것이 좋습니다. – Simon

1
경우 오류가 발생합니다있는 자신의 코드

그리고 당신은 db.getMsg()를 호출 할 때 다음과 같이 호출

db.getMsg(uid, function(err, result) { 
    if(err){ 
     res.send({msg : "No message available"}); 
    }else{ 
     msg = result 
     res.send({msg: result}) 
    } 
}) 
+0

여기에 메시지를 설정하고 싶지 않습니다. 전역 변수를 설정하고 싶습니다. ! 데이터베이스에서 콘텐츠를 저장할 수 있습니다. – nolags

+0

코드를 편집했습니다. 이 질문에 대한 대답이 있습니까? – AshanPerera