2011-08-13 5 views
0

누군가 mongodb에서 문자열 값을 가져 와서 변수에 저장하는 방법을 보여 줄 수 있는지 궁금합니다.MongoDB의 데이터를 변수 -mongoose 및 node.js에 저장하십시오.

db.model("users").findOne({username: username, password: password}, {type:1}, 
    function(err, data) { 
     if(err) { 
      return "Error"; 
     } else if() { 
      return "No records"; 
     } else { 
      return data.type; 
     } 
    } 
); 

나는 이것을 실행할 때 형식 값을 얻습니다.

하지만이 함수 외부의 변수에 어떻게 저장합니까?

답변

2

익명 함수의 반환 값은 완전히 무시됩니다. 현재 범위에서 액세스 할 수있는 위치에 변수를 저장할 수 있습니다. 예 : server.js에서

var Database = function { 
    var myText = null; 

    return {  

    getUser: function(username, password, callback) { 
     db.model("users").findOne({username: username, password: password}, {type:1}, 
      function(err, data) { 
      if (err) { 
       myText = "Error"; 
      } 
      else if (data.length == 0) { 
       myText = "No records"; 
      } 
      else { 
       myText = data.type 
      } 

      $('.log').html(myText); 
      callback(myText); 
     }); 
    }; 
    }; 
}(); 

, 당신은 다음 호출 할 수

Database.getUser(username, password, function(theText) { alert(theText); }); 

당신은 동 기적으로 실행되지 않습니다 콜백 자바 스크립트 때문에 상호 작용하는 방법을 다른 요소에 대한 영리해야합니다. 즉, 원하는 결과를 얻을 수 있어야합니다. 즐겁고 행복한 코딩!

+0

문제는 Database.js 파일에서 getUserType 함수를 호출하는 Server.js 파일이 있다는 것입니다. 문제는 database.js에서 server.js로 값을 가져 오는 방법을 모른다는 것입니다. – chris

+0

콜백 함수를 Server.js에서 직접'findOne'에 전달해야합니다. MongoDB가 동기가 아닌 것처럼 제안하는 방식으로 변수를 전달하는 것은 어렵습니다. MongoDB는 콜백을 처리하는 최상의 방법을 기반으로하므로 (즉, 호출 된 정확한 위치에서'findOne'에 콜백을 전달하기 때문에) database.js에'findOne'을 캡슐화하지 않을 것을 제안합니다. 즉, 콜백을 캡슐화하고 database.js를 통해 전달함으로써 항상 콜백을 통해 루프 할 수 있습니다. 말이 돼? – ghayes

+0

다음과 같습니다. D findOne 함수를 서버에 넣고 실행합니다. 나는 방금 서버와 데이터베이스를 분리 할 것이라고 생각했기 때문에 모든 것이 약간 주문되었다. – chris

관련 문제