問題:
問題如標題所示,當前端同時向後台請求兩個需要操作資料的介面時,後台就報錯了,感覺是因為第二次請求時前一次資料庫還沒有關閉導致報錯。
程式碼如下:
db.js:
var settings = require('../settings'),
Db = require('mongodb').Db,
Connection = require('mongodb').Connection,
Server = require('mongodb').Server;
module.exports = new Db(settings.db, new Server(settings.host, settings.port), {safe: true});
user.js
user.checkCollect = function(username, artid, callback) {
mongodb.collection('users', function (err, collection) {
if (err) {
mongodb.close();
return callback(true);
}
collection.findOne({
"name": username
}, function(err, post) {
if (err) {
mongodb.close();
return callback(err);
}
if (!post) {
mongodb.close();
return callback(true);
}
var userCollections = post.collections
, hasCollected = false
;
for (var i = 0, len = userCollections.length; i < len; i++) {
if (userCollections[i] === artid) {
hasCollected = true;
break;
}
}
callback(false, hasCollected);
mongodb.close();
})
})
}
}
這是資料庫操作的程式碼,經過測試,發現無論請求的是同一個接口還是不同的接口,只要同時請求兩次以上,都會出現這個問題,求大牛指教!
看起來你用的是
node-mongodb-native
驱动。老版本确实有使用过DB作为顶级对象,不过现在的驱动通常建议把MongoClient
用为顶级对象使用。直接参考驱动文档:https://github.com/mongodb/no...
注意
MongoClient
维护着连接池,所以通常当你的应用退出前都可以不要关闭,保留一个单例的MongoClient
一直用就可以了。