Node.js nodejsconnectmongo

Node.js nodejsconnectmongo,node.js,mongodb,Node.js,Mongodb,我尝试将节点应用程序中的数据存储移动到mongo db。但我对mongo db有一个简单的问题 我有一个按钮,点击在网站上,将调用/数据存储 app.post('/datastore', (req, res) => { client.connect(err => { var dbo = client.db("test"); dbo.listCollections().toArray(function(err, items){

我尝试将节点应用程序中的数据存储移动到mongo db。但我对mongo db有一个简单的问题

我有一个按钮,点击在网站上,将调用/数据存储

app.post('/datastore', (req, res) => {

    client.connect(err => {
        var dbo = client.db("test");
        dbo.listCollections().toArray(function(err, items){
            if (err) throw err;

            console.log(items);
            if (items.length == 0)
                console.log("No collections in database")
        });

        client.close();
    });

});
这是我第一次点击这个按钮,效果很好。但如果我第二次单击按钮,我会收到错误消息:

不支持选项[servers],不支持选项[caseTranslate] 不支持选项[dbName]不支持选项 不支持[凭据] /Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb/lib/utils.js:132 犯错误; ^

MongoError:拓扑已被破坏 在初始化时(/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb core/lib/cursor.js:596:25) 在下一个函数(/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb core/lib/cursor.js:456:12) 在CommandCursor.Cursor.next(/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb core/lib/Cursor.js:766:3) 在CommandCursor.Cursor._next(/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb/lib/Cursor.js:216:36) 在fetchDocs(/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb/lib/operations/cursor_ops.js:217:12) 在toArray(/Users/ingofferster/Downloads/development/testrunner/node_modules/mongodb/lib/operations/cursor_ops.js:247:3) 在执行操作时(/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb/lib/utils.js:416:24) 位于CommandCursor.Cursor.toArray(/Users/ingoforester/Downloads/development/testrunner/nodeêmodules/mongodb/lib/Cursor.js:829:10) 位于client.connect.err(/Users/ingoforester/Downloads/development/testrunner/start.js:256:35) 结果(/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb/lib/utils.js:410:17) 在executeCallback(/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb/lib/utils.js:402:9) 错误(/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb/lib/operations/mongo_client_ops.js:286:5) 在connectCallback(/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb/lib/operations/mongo_client_ops.js:265:5) 在topology.connect(/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb/lib/operations/mongo_client_ops.js:417:5) 在ReplSet.connectHandler(/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb/lib/topologies/ReplSet.js:343:9) 在Object.onceWrapper(events.js:281:20) 在ReplSet.emit(events.js:193:13) 在/Users/ingoforester/Downloads/development/testrunner/node_modules/mongodb core/lib/topologies/replset.js:786:18 在处理和拒绝时(内部/process/task_queues.js:79:9)


我无法解释为什么会发生这种情况,因为我的代码中有client.close()。你知道为什么我不能多次调用该函数吗?

当你第一次单击按钮时,你可以按预期得到结果,但在得到结果后,你也可以通过调用来关闭连接
client.close(),这不会让MongoDB第二次重新连接

理想情况下,应该重用现有连接,而不是为每个API调用调用
connect
方法


尝试使用
return client.close()
var express = require('express');
var mongodb = require('mongodb');
var app = express();

var MongoClient = require('mongodb').MongoClient;
var db;

// Initialize connection once
MongoClient.connect("mongodb://localhost:27017/integration_test", function(err, database) {
  if(err) throw err;

  db = database;

  // Start the application after the database connection is ready
  app.listen(3000);
  console.log("Listening on port 3000");
});

// Reuse database object in request handlers
app.get("/", function(req, res) {
  db.collection("replicaset_mongo_client_collection").find({}, function(err, docs) {
    docs.each(function(err, doc) {
      if(doc) {
        console.log(doc);
      }
      else {
        res.end();
      }
    });
  });
});