2016-10-12 3 views
1

나는 express js와 node j를 처음 사용합니다. 나는 이것을 할 수 있는지 없는지 궁금하다.Express js는 mongodb에서 쿼리 외부로 값을 사용합니다.

첫 번째 질문은 1 쿼리에서 개수를 얻으려고합니다.

두 번째 I 쿼리 수집 로그인. 그것을 반복하고 형식을 지정하고 ID를 사용하여 이름 값을 가져옵니다.

count1에서 정의되지 않은 부분이 있으며 json 응답에서 생략되었습니다.

쿼리를 쿼리 외부로 전달하는 방법은 무엇입니까?

router.post('/logmein', function(req, res, next) { 
    var email = req.param('email'); 
    var password = req.param('password'); 
    var count1; 

    MongoClient.connect(MongoUrl, function(err, db) { 
     if (err) return; 

     db.collection('users').count({email: email,password: md5(password)}, function(err, count) { 
      count1 = count; 
     }); 

     db.collection('login').find({email: email,password: md5(password)}).toArray(function(err, results){ 
      console.log(results); // output all records 
     }); 


     //use results 
     /* 
     foreach each results format with other info 

     var new_array; 
     */ 
     res.json({"success": true,"count":count1,new_array: new_array}); 
    }); 
}); 
+0

위 코드를 실행하려고하면 어떤 오류가 발생합니까? 단순히 결과를 콘솔에 출력하는 대신 리턴하는 것을 시도 했습니까? –

+0

변수 count1에 대해 정의되지 않습니다. – Boy

답변

1

비동기 문제를 비동기 흐름을 제어 async.parallel 뭔가를해야합니다. async module을 사용하면 쿼리를 동시에 실행할 수 있습니다. 마지막으로 최종 콜백 결과가 표시됩니다. 이 스 니펫으로 문제가 해결됩니다.

var async = require('async'); 

router.post('/logmein', function (req, res, next) { 
    var email = req.param('email'); 
    var password = req.param('password'); 
    var retResults; 
    var count1; 

    MongoClient.connect(MongoUrl, function (err, db) { 
    if (err) return; 

    async.parallel([ 
     function(callback){ 
     db.collection('users').count({ email: email, password: md5(password) }, function (err, count) { 
      return callback(err, count); 
     }); 
     }, 
     function(callback){ 
     db.collection('login').find({ email: email, password: md5(password) }).toArray(function (err, results) { 
      return callback(err, results); 
     }); 
     } 
    ], function(err, results) { 
     if (err) { 
     // @todo: handle the error 
     } 

     count1 = results[0]; 
     retResults = results[1]; 


     //use results 
     /* 
     foreach each results format with other info 

     var new_array; 
     */ 
     res.json({ "success": true, "count": count1, new_array: new_array }); 

    }; 
    }); 
}); 
+0

count1 및 retResults에 대해 아직 정의되지 않았습니다. – Boy

+0

또한 console.log (retResults)를 넣으려고 할 때; 전화가 끝나지 않습니다. – Boy

+0

@LJBoy 콜백을 입력하는 것을 잊어 버렸습니다. 그냥 고쳤어, 다시 해봐. –

1

당신은 당신이 그것을 더 볼 필요가, 당신의 nodejs 응용 프로그램의

async.parallel([ 
    function(callback){ ... }, 
    function(callback){ ... } 
], function(err, results) { 
    // optional callback 
};