5

なぜこれが終わらないのか、私の人生では理解できません:

var pmongo = require('promised-mongo');
var db = pmongo('mongodb://localhost/builder');
var block_id = '538d097bbb12479d0e9f70ab';

var collection = db.collection('block');
collection.findOne({_id:db.ObjectId(block_id)})
.then(function(result) {
    console.dir(result);
}).done();

基本的にハングするだけです。findOne は promise を返します。done を呼び出しています。奇妙なことに、then でデータベース (つまり db.close()) を閉じると、終了します。

私は最終的にこれを速達で処理しようとしているので、データベースを閉じたくありません。コツは???

4

1 に答える 1

6

MongoDB 接続は永続的であることを目的としています。それらの 1 つ (またはそれらのプール) を作成し、アプリケーション全体でその接続を再利用します。

この永続的なネットワーク接続により、node.js プロセスが維持されるため、ノード プロセスをシャットダウンする場合は、手動で接続を閉じる必要があります。これはデータベース接続の一般的なパターンであり、MySQL に接続している場合も同じことが起こります。

Express.js アプリケーションでは、ファイルの先頭で接続を 1 回行うだけで、その接続をすべてのリクエストで再利用できます。

于 2014-06-05T10:09:59.910 に答える