9

似乎我无法关闭与 Node.js 本机驱动程序的 MongoDB 连接。当我运行node replica.js脚本时,它永远不会结束,因此由于某种原因无法关闭连接。

这是代码。这是一个副本集,但我认为这不是问题:

var mongodb = require('mongodb')
  , Db      = mongodb.Db
  , Server  = mongodb.Server
  , ReplSet = mongodb.ReplSet;

// Replica set
var replSet = new ReplSet( [
    new Server('localhost', 27017), // Primary
    new Server('localhost', 27018), // Secondary
    new Server('localhost', 27016), // Secondary
  ],
  { rs_name: 'replica', read_secondary: true }
);

var db = new Db('test', replSet, { native_parser: true, w: 1 });

// Opening
db.open(function (err, db) {
    if (err) console.error(err);

    db.close();
});

连接到单个 mongod 实例工作得很好,连接关闭并且脚本结束,不需要(由 robertklep 建议)process.exit()调用:

var mongodb = require('mongodb')
  , Db      = mongodb.Db
  , Server  = mongodb.Server;

// Single instance
var server = new Server('localhost', 27017):
var db = new Db('test', server, { native_parser: true, w: 1 });

// Opening
db.open(function (err, db) {
    if (err) console.error(err);

    db.close();
});
4

2 回答 2

7

事实证明这是一个错误,现已在 1.3.6 中修复。看看我几天前打开的这个问题。有趣的是,这是我第一次使用 MongoDB ......

于 2013-05-21T09:34:01.153 回答
0

在这种情况下,您可能需要通过true作为第一个参数传递给close. 您还应该提供回调,以便在尝试关闭时提醒您任何问题:

db.open(function (err, db) {
    if (err) console.error(err);

    db.close(true, function (err) {
        if (err) console.error(err);
        else console.log("close complete");
    });
});
于 2013-05-20T18:45:53.337 回答