完了したら、マングースの接続を適切に閉じます
質問
私は継続的に実行することを意図していないスクリプトでMongooseを使用しており、非常に単純な問題と思われるものに直面していますが、答えは見つかりません。 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
ありがとう
編集:技術的には正しいので以下の回答を受け入れましたが、誰かがこの問題に再びヒットした場合、Mongooseおよび/または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');
});
おそらくあなたはこれを持っています:
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();
});