2013-06-08 3 views
0

DB 호출을 구조화하는 방법에 대한 실제 지식이 있으므로 나머지 함수보다 먼저로드해야합니다. 이것은 간단한 일입니다. DB를 사용하기 전에 사용자를 찾아야합니다. 몽구스 지금 전화로 몽구스 비동기 로그인 문제

은 그래서 병렬 async.js을 시도하고있다. 솔직히하기 위해 85 가지 방법을 시도했습니다. 난 항상 같은 결과를 얻을 수

async.parallel ([ 

    function(callback) { 

     mongoose.connect(ConnString, function(error) { 

     console.log("connection ok...") 

     callback(); 

    }); 
    }, 

function(callback) { 

    console.log("second function"); 

    callback(); 

}], 

function(error){ 

    console.log("in the error callback"); 

}); 

:

여기에 코드입니다.

second function 
out of async... continuing 
connection ok... 
in the error callback 

이것은 내가 제공 할 수있는 가장 간단한 분류입니다. 이 문제에 6 시간을 보냈습니다. 귀하의 도움에 감사드립니다!

+0

FWIW :'async.parallel'은 여러분의 기능을 서로 잘 평행하게합니다. 나는 당신이'async.series'를 사용하려고 생각했는데, 다음 단계는 이전이 끝날 때만 실행됩니다. – robertklep

답변

0

무엇을 당신이하려는 것은 당신이 귀찮게하지 않습니다 다음 문을 실행하기 전에 DB 접속이 준비 당신이있어 있는지 확인됩니다. 몽구스가 준비가 될 때까지 요청을 대기열에 넣습니다.

또한, 기본 연결 (mongoose.connect) 대신 별도의 하나 (mongoose.createConnection)를 사용의 의미를 알고 있어야합니다.

main github page of mongoose 몇 가지 흥미로운 독서가 포함되어 있습니다.

또한, 그것은 불필요 ... async.parallel 블록을 풀어. 있는 그대로 코드를 작성하십시오.

================================= 편집 ============ 다음과 같은 경우 도움 ===================

은 다음을 참조하십시오

/* dependencies */ 
var mongoose = require('mongoose'); 

/* schema definition */ 
var UserSchema = new mongoose.Schema({ 
    phone: { type: String, required: true } 
    // other user details here... 
}); 

/* model definition */ 
var User = mongoose.model('User', UserSchema); 

/* static methods */ 
UserSchema.statics.isAuthorized = function (phone, cb) { 
    User.find({ phone : { $in : [phone] } }).exec(function(err, data) { 
     // logic & callback here... 
    }); 
}; // eo isAuthorized(..) 

// export the user. 
module.exports = User; 
이제 User.isAuthorozed를 실행 (...) 수

+0

처음에는 DB 쿼리가 항상 준비되지 않은 문제가있었습니다. 인증 객체를 내보내는 모델을 설정했습니다 ...이 객체에는 사용자를 찾기위한 쿼리와 그가 유효하다는 것을 나타내는 속성이 있습니다. 같은 다른 모델에서 참조 할 때 : if (LoggedIn) {} 그것은 쿼리가 실행 완료되지 않았기 때문에 항상 false로 되돌아갑니다. – chuckjones242

+0

코드를 첨부 할 수 있습니까? –

+0

이것은 더 큰 첫 번째 흐름이었습니다. in app.js logic = require ('./ models/logic.js'); var Authorize = authenticate (req.param ('From'))); if (LoggedIn) {// logic here} in logic.js module.exports.Authorize = Authorize; 기능 권한 부여 (전화) { \t this.IsAuthorized = false; mongoose.connect (ConnString 함수 (에러) { \t VAR 쿼리 User.find = ({}) \t 어디에요 ('폰').의 ([휴대 전화]) \t query.exec (함수 (ERR , 결과) { \t \t 경우 (result.length! = 0) { \t \t \t \t \t { 이.IsAuthorized = true; \t \t \t} \t \t \t mongoose.connection.close(); – chuckjones242