2014-10-10 6 views
0

JS 노드에서 mongodb에서 데이터를 검색하여 반환하는 외부 메서드를 작성하려고합니다. 나는 mongodb과 상호 작용하기 위해 MongoClient.js 모듈을 사용했다. 그러나 문제는 외부 메서드를 호출 할 때 데이터베이스 연결 메서드가 실행을 완료하기 전에 값을 반환한다는 것입니다. 여기서 나는 mongodb.connect 방법이 완료 될 때까지 나의 반환 계산서를 보전하고 싶다. 어떻게해야할까요? 여기 내 코드는Node.js mongoclient를 사용하는 mongodb 연결

service.js employeeService 데이터베이스와 상호 작용하고 웹 서비스를 작성하고 사용자에게 응답하는 경우 service.js로 데이터를 반환하는 모델 역할을

var employee = require('./model/employeeService.js'); 
var json = employee.getUser(employeeId); 

, 다음과 같습니다.

employeeService.js

exports.getUser = function(employeeId) { 
    var json = []; 
    MongoClient.connect(db.getdbUrl(),function(err,db){ 
     if(err) { 
      json = err; 
     }else { 
      document = (employeeId)?{_id:employeeId}:{}; 
      db.collection('Employee').find(document).limit(50).toArray(function(err,users){ 
      if(err) { 
       json = err; 
      } 
      else { 
        console.log("Inside MongoClient"); // this will executes second 
        json = users; 
       } 
      }); 
     } 
    }); 
    console.log("OutSide",json); // this executes first 
    return json; 
} 

여기에 내가 service.js에서 호출하여 내 출력 콘솔과 점점 하늘의 배열에서 연결 MongoClient.connect 방법의 비동기 실행 흐름을 찾을 수 있습니다.

출력 콘솔

OutSide [] 
Inside MongoClient 

답변

0

not이 비정상 유동이고, 이것은 asynchronous 코드를 실행하는 방법이다. 사용자를 반환하려면 else{} 안에, json = users;return users;으로 바꾸고 코드 끝에서 반품을 제거하십시오.

그리고 Asynchrounous vs Synchrounous 통화에 대한 정보를 더 많이 얻고 어떻게 실행하는지 알아보십시오. 또한 자바 스크립트에서 callback을 학습하는 것을 고려하십시오.