2013-07-26 2 views
1

는이 코드를 가지고 :db.collection()에서 콜백이 발생하지 않는 이유는 무엇입니까? 데이터베이스 연결이 끊어지면 find(). toArray (콜백)가 호출됩니까?

DB 내 로컬 MongoDB를 서버에 열린 데이터베이스 연결입니다
db.collection('users').find({ active: true).toArray(callback); 

. 이것은 잘 작동합니다. 하지만 내 응용 프로그램이 실행되는 동안 mongodb 서버를 수동으로 닫은 다음이 코드 줄을 실행하면 오류가 발생하지 않고 콜백이 실행되지 않습니다. 이 예상되는 동작입니까? 내 앱이 데이터베이스 연결 끊김에 반응하도록하려면 어떻게해야합니까?

편집 :

다시
db.collection('users') 
    .find({active: true}, function(err, cursor) { 
    if (err) callback(err); 
    else cursor.toArray(callback); 
    }); 

, 연결이 살아있다, 그러나 연결이 끊어 때, 발견의 익명 콜백 함수()가 호출 될 때이 작품 '

나는이 시도 err '을 null로 설정하고 .toArray의 콜백이 전혀 호출되지 않습니다. DB 연결이 작동하지 않는 경우 오류가 발생하도록 코드를 다시 작성하려면 어떻게합니까?

+0

경우 (db._state === "연결") { db.collection ('사용자') .find (... } 다른 {("가인") 인상;} 대답에 대한 – Rondo

답변

1

삭제 된 연결에 대응하려면 close 이벤트에 대한 이벤트 리스너를 등록 할 수 있습니다.

db.on('close', function(err) { 
    console.error('Connection to Mongo lost: %s', err); 
}); 

그것을 시도하고 연결을 다시 수 있도록 당신은 또한 당신의 몽고 연결에 auto_reconnect 지시문을 추가 할 수있는 옵션을 가지고, 예를 들어,

MongoClient.connect(mongoUri, { server: { auto_reconnect: true } }, handleConnect) 

MongoClient.connect()에 대해 사용할 수있는 옵션 자세한 내용은 docs를 참조하십시오.

.toArray()callback 내가 인해 더 이상 활동적인 db으로 표시되지 연결에 .collection() 호출이 실패했음을 추측 할 호출하지에 대해서.

+0

감사합니다 연결이 끊긴 경우에 반응하는 것에 대해. 나는 연결을 끊으면 db 쿼리가 오류를 반환 할 수 있도록 내 코드를 다시 디자인하는 방법에 대해 여전히 궁금합니다. 내 질문을 편집했습니다. –

관련 문제