1. ホーム
  2. node.js

[解決済み] 終了したらmongooseの接続を適切に終了させること

2022-04-22 13:21:05

質問

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

ありがとうございます。

EDIT: 技術的には正しいので、以下の回答を受け入れました。しかし、もし誰かがこの問題に再びぶつかった場合、mongooseやmongodbドライバは、まだクエリが実行されている場合、接続を閉じるように要求しても実際には閉じないようです。

切断の呼び出しを全く覚えておらず、クエリの実行が終了しても切断を行いません。例外のスローやその類のものは一切なく、呼び出しを破棄するだけで、実際に接続を閉じることはないのです。

つまり、disconnect()を実際に動作させたい場合は、すべてのクエリが処理されたことを確認してから呼び出す必要があるということです。

どのように解決するのですか?

接続を閉じるには

mongoose.connection.close()