Node.js MongoDB insert error
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function uploadVote(voter, vote){ MongoClient.connect(url, function(err, db){ if (err) throw err; db.collection('testvote', function(err, collection) { collection.find({"psid": voter}).toArray(function(err, result) { if(!result[0]){ db.collection("testvote").insert({psid:"a", choice:0}, function(err, res) { if (err) throw err; console.log('insertone') sendTextMessage(".") }); } else if(!result[0].choice){ db.collection("testvote").update({psid: voter}, {$set: {'choice': vote}}, function(err, res){ if (err) throw err; sendTextMessage(".") }) } else{ sendTextMessage(voter,"!"); } }); db.close(); }); }) } |
您好,我正在开发一个Facebook Messenger,可让用户投票。在上面的代码中,我完全看不到语法错误。但是执行此函数时,会不断出错:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /app/node_modules/mongodb/lib/utils.js:123 2017-05-18T12:09:19.856188+00:00 app[web.1]: process.nextTick(function() { throw err; }); 2017-05-18T12:09:19.856188+00:00 app[web.1]: ^ 2017-05-18T12:09:19.858765+00:00 app[web.1]: at ReplSet.insert (/app/node_modules/mongodb/lib/replset.js:398:18) 2017-05-18T12:09:19.858761+00:00 app[web.1]: MongoError: topology was destroyed 2017-05-18T12:09:19.858764+00:00 app[web.1]: at ReplSet.insert (/app/node_modules/mongodb-core/lib/topologies/replset.js:1025:47) 2017-05-18T12:09:19.858766+00:00 app[web.1]: at executeCommands (/app/node_modules/mongodb/lib/bulk/ordered.js:455:23) 2017-05-18T12:09:19.858766+00:00 app[web.1]: at OrderedBulkOperation.execute (/app/node_modules/mongodb/lib/bulk/ordered.js:508:10) 2017-05-18T12:09:19.858767+00:00 app[web.1]: at bulkWrite (/app/node_modules/mongodb/lib/collection.js:664:8) 2017-05-18T12:09:19.858768+00:00 app[web.1]: at Collection.insertMany (/app/node_modules/mongodb/lib/collection.js:534:44) 2017-05-18T12:09:19.858769+00:00 app[web.1]: at /app/index.js:121:41 2017-05-18T12:09:19.858768+00:00 app[web.1]: at Collection.insert (/app/node_modules/mongodb/lib/collection.js:836:15) 2017-05-18T12:09:19.858770+00:00 app[web.1]: at handleCallback (/app/node_modules/mongodb/lib/utils.js:120:56) 2017-05-18T12:09:19.858771+00:00 app[web.1]: at /app/node_modules/mongodb/lib/cursor.js:860:16 |
请帮助我解决此问题。
数据库调用将是异步的,这意味着
您需要确保仅在完成连接后才调用
这是package在Promise中的代码版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | function uploadVote(voter, vote){ MongoClient.connect(url, function(err, db){ if (err) throw err; new Promise((resolve, reject) => { db.collection('testvote', function(err, collection) { collection.find({"psid": voter}).toArray(function(err, result) { if(!result[0]){ db.collection("testvote").insert({psid:"a", choice:0}, function(err, res) { if (err) throw err; console.log('insertone') sendTextMessage(".") resolve(); }); } else if(!result[0].choice){ db.collection("testvote").update({psid: voter}, {$set: {'choice': vote}}, function(err, res){ if (err) throw err; sendTextMessage(".") resolve(); }) } else{ sendTextMessage(voter,"!"); resolve(); } }); }); }).then(() => db.close()); }) } |
如果得到这样的