MongoDb在db.close()上抛出错误

Ban*_*San 4 javascript mongodb node.js node-mongodb-native

我使用以下代码将文档保存到数据库:

MongoClient.connect(mongoUrl, function(error, db) {
    console.log('Mongo: error = \'' + error + '\' db = \'' + db + '\'');
    insertDocument(db, parsedDocument);
    db.close();
});

function insertDocument(db, document) {
    db.collection('test').insertOne(document, function(error, result) {
        console.log('Save document.  error = \'' + error + '\' result = \'' + result + '\'');
    });
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我将db.close()语句留在中,则会在错误对象中出现错误.如果我删除该行,则保存文档.

Received.  ID: '04023828-9ef3-4f10-b1d1-108208c9e3b7'
Mongo: error = 'null' db = '[object Object]'
Save document.  error = 'MongoError: server localhost:27017 sockets closed' result = 'undefined'
Run Code Online (Sandbox Code Playgroud)
  1. 为什么关闭数据库会导致错误?
  2. 不明确关闭连接是否安全?

Dmy*_*nko 5

1.为什么关闭数据库会导致错误?

您的函数insertDocument是异步执行的.您不是在等待插入完成并立即执行db.close(),这自然会干扰插入操作.

如果需要关闭连接,请在传递给的回调中执行此操作insertDocument.

2.不明确关闭连接是否安全?

实际上,您应该尝试在整个应用程序生命周期中重用连接.由Node驱动程序的主要贡献者查看此评论:https://groups.google.com/d/msg/node-mongodb-native/mSGnnuG8C1o/Hiaqvdu1bWoJ

另外,请阅读连接池:https://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#mongoclient-connection-pooling