2014-10-13 4 views
26

어제 저는 MongoDB 자바 스크립트 드라이버를 사용하기 시작했습니다.MongoDB '서버 소켓이 닫혔습니다'& 수정 사항이 없습니다

문제가 발생했습니다. 오류가 계속 표시되지만 데이터는 계속 저장됩니다.

아래에서 처음에 DB에 연결하는 데 사용하는 자바 스크립트를 볼 수 있으며 삽입 쿼리가 시작됩니다. 삽입 쿼리, 콘솔 출력을 시작하지 않을 경우 : 삽입 쿼리를 실행할 때 서버

에 제대로 연결

서버를 성공적으로

에서 끊김을하지만, 오류가 리턴됩니다.

제대로 서버에 연결

{ [MongoError: server localhost:27017 sockets closed] 이름 : 'MongoError', 서버에서

message: 'server localhost:27017 sockets closed'}

끊김 성공적으로

어느 한 올바른 방향으로 날 지점 수 있을까요?

MongoClient.connect(db_default.db_url, function(err, db) { 
    console.log('Connected correctly to server'); 
    if(err) { 
     console.log(err); 
    } 
    else { 
     mongoInsert(db, 'user', user_default, function(user_res) { 
      console.log(user_res); 
     }); 
    } 
    db.close(); 
    console.log('Disconnected from server successfully'); 
}); 

function mongoInsert(db, collection_name, data,cb) { 
    var collection = db.collection(collection_name); 
    collection.insert(data, function(err, res) { 
     if(err) { 
      console.log(err); 
     } 
     else { 
      console.log('Inserted into the ' + collection_name + ' collection'); 
      cb(res); 
     } 
    }); 
} 
+12

비동기. 연결 콜백은 insert 함수를 호출하고 실제로 삽입이 실행되기 전에 즉시 데이터베이스에 대한 연결을 닫습니다. 콜백에서 데이터베이스 연결을 닫으십시오. – wdberkeley

+0

@wdberkeley 삽입이 실행되기 전에 연결이 닫히면 데이터가 어떻게 저장됩니까? –

+0

@SasankaPanguluri 이것은 비 결정적이지만 삽입이 발생하면 데이터베이스 드라이버가 요청을 데이터베이스에 전달한 다음 연결을 닫는 경우가 발생합니다. 따라서 데이터베이스는 삽입을 처리하지만 소켓이 닫혀서 상호 작용을 성공적으로 완료 할 수 없습니다. – Eoin

답변

49

결과를 받기 전에 db 연결을 닫지 마십시오. 다음과 같이 수행 : 나는 마침내 해결책을 발견

MongoClient.connect(db_default.db_url, function(err, db) { 
    if(err) { 
     console.log(err); 
    } 
    else { 
     mongoInsert(db, 'user', user_default, function(user_res) { 
      console.log(user_res); 
      db.close(); 
     }); 
    } 

    console.log('Disconnected from server successfully'); 
}); 

function mongoInsert(db, collection_name, data,cb) { 
    var collection = db.collection(collection_name); 
    collection.insert(data, function(err, res) { 
     if(err) { 
      console.log(err); 
     } 
     else { 
      console.log('Inserted into the ' + collection_name + ' collection'); 
      cb(res); 
     } 
    }); 
} 
+8

거의 1 년 전에 묻고 나는 너에게 큰 녹색 진드기를주지 않았다. 미래의 도움에 감사드립니다! –

0

, 문제는 새 서버와 mongdb의 NPM 파일에 대한 파일 보안이 있었다, 내가 사용하는 "대한 Chown"명령은 모든 파일을 소유하고 "NPM을 실행했다 설치 "

관련 문제