Rumah > Soal Jawab > teks badan
问题:
问题如标题所示,当前端同时向后台请求两个需要操作数据的接口时,后台就报错了,感觉是因为第二次请求时前一次数据库还没有关闭导致报错。
代码如下:
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();
})
})
}
}
这是数据库操作的代码,经过测试,发现无论请求的是同一个接口还是不同的接口,只要同时请求两次以上,都会出现这个问题,求大牛指教!
曾经蜡笔没有小新2017-05-02 09:23:20
Nampaknya anda sedang menggunakan node-mongodb-native
pemandu. Versi lama memang menggunakan DB sebagai objek peringkat atas, tetapi pemacu semasa biasanya mengesyorkan menggunakan MongoClient
sebagai objek peringkat atas. Rujuk terus kepada dokumentasi pemandu:
https://github.com/mongodb/no...
Perhatikan bahawa MongoClient
mengekalkan kolam sambungan, jadi biasanya anda tidak perlu menutupnya sebelum keluar, dan simpan satu. Contohnya, hanya gunakan MongoClient
sepanjang masa.