[node.js] 완료되면 몽구스의 연결을 올바르게 닫으십시오.

나는 지속적으로 실행되지 않는 스크립트에서 몽구스를 사용하고 있으며 매우 간단한 문제 인 것처럼 보이지만 대답을 찾을 수 없습니다. 간단히 mongodb에 요청을 보내는 mongoose 함수를 호출하면 nodejs 인스턴스가 멈추지 않으며 Ctrl + c 또는 Program.exit ()로 수동으로 종료해야합니다.

코드는 대략 다음과 같습니다.

var mongoose = require('mongoose');

// if my program ends after this line, it shuts down as expected, my guess is that the connection is not really done here but only on the first real request ?
mongoose.connect('mongodb://localhost:27017/somedb'); 

// define some models

// if I include this line for example, node never stop afterwards
var MyModel =  mongoose.model('MyModel', MySchema);

mongoose.disconnect ()에 호출을 추가하려고 시도했지만 결과는 없습니다. 그 외에도 모든 것이 잘 작동합니다 (찾기, 저장 등).

이것은이 사람과 똑같은 문제이며 슬프게도 아무런 대답을 얻지 못했습니다 : https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661

감사

편집 : 기술적으로 정확하기 때문에 아래 답변을 수락했지만 누군가 가이 문제를 다시 발견하면 몽구스 및 / 또는 mongodb 드라이버가 여전히 실행중인 쿼리가 있는지 물어볼 때 연결을 닫지 않는 것 같습니다.

연결 끊기 호출도 전혀 기억하지 않으며 쿼리 실행이 완료되면 기억하지 않습니다. 예외 나 다른 종류의 호출없이 호출을 버리고 실제로 연결을 닫지 않습니다.

그래서 당신은 그것을 가지고 있습니다 : 실제로 작동하려면 disconnect ()를 호출하기 전에 모든 쿼리가 처리되었는지 확인하십시오.



답변

연결을 닫을 수 있습니다

mongoose.connection.close()


답변

다른 대답은 나를 위해 작동하지 않았습니다. 이 답변에mongoose.disconnect(); 명시된대로 사용해야 했습니다 .


답변

연결을 변수로 설정 한 다음 완료되면 연결을 끊을 수 있습니다.

var db = mongoose.connect('mongodb://localhost:27017/somedb');

// Do some stuff

db.disconnect();


답변

4.4.2 버전을 사용하고 있으며 다른 답변은 저에게 효과적이지 않습니다. 그러나 useMongoClient옵션에 추가 하고 호출하는 변수에 넣는 것이 효과가있는 close것 같습니다.

var db = mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient: true })

//do stuff

db.close()


답변

메소드 외부에서 닫거나 연결을 끊으려고하면 오류가 발생합니다. 가장 좋은 해결책은 메소드의 두 콜백에서 연결을 닫는 것입니다. 더미 코드가 여기 있습니다.

const newTodo = new Todo({text:'cook dinner'});

newTodo.save().then((docs) => {
  console.log('todo saved',docs);
  mongoose.connection.close();
},(e) => {
  console.log('unable to save');
});


답변

Jake Wilson이 말한 것처럼 : 연결을 변수로 설정 한 다음 완료되면 연결을 끊을 수 있습니다.

let db;
mongoose.connect('mongodb://localhost:27017/somedb').then((dbConnection)=>{
    db = dbConnection;
    afterwards();
});


function afterwards(){

    //do stuff

    db.disconnect();
}

또는 비동기 기능 내부에있는 경우 :

(async ()=>{
    const db = await mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient: 
                  true })

    //do stuff

    db.disconnect()
})

그렇지 않으면 내 환경에서 확인했을 때 오류가 발생합니다.


답변

아마 당신은 이것을 가지고 있습니다 :

const db = mongoose.connect('mongodb://localhost:27017/db');

// Do some stuff

db.disconnect();

그러나 다음과 같은 것을 가질 수도 있습니다.

mongoose.connect('mongodb://localhost:27017/db');

const model = mongoose.model('Model', ModelSchema);

model.find().then(doc => {
  console.log(doc);
}

전화를 걸 수는 없지만 db.disconnect()사용 후 연결을 닫을 수 있습니다.

model.find().then(doc => {
  console.log(doc);
}).then(() => {
  mongoose.connection.close();
});