Node.js nodejsconnectmongo
我尝试将节点应用程序中的数据存储移动到mongo db。但我对mongo db有一个简单的问题 我有一个按钮,点击在网站上,将调用/数据存储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){
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();
}
});
});
});