搜尋

首頁  >  問答  >  主體

資料庫 - express+mongodb開發報錯 server instance in invalid state undefined

問題:
問題如標題所示,當前端同時向後台請求兩個需要操作資料的介面時,後台就報錯了,感覺是因為第二次請求時前一次資料庫還沒有關閉導致報錯。

程式碼如下:
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();
    })
  })
}

}
這是資料庫操作的程式碼,經過測試,發現無論請求的是同一個接口還是不同的接口,只要同時請求兩次以上,都會出現這個問題,求大牛指教!

给我你的怀抱给我你的怀抱2788 天前584

全部回覆(1)我來回復

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-02 09:23:20

    看起來你用的是node-mongodb-native驱动。老版本确实有使用过DB作为顶级对象,不过现在的驱动通常建议把MongoClient用为顶级对象使用。直接参考驱动文档:
    https://github.com/mongodb/no...
    注意MongoClient维护着连接池,所以通常当你的应用退出前都可以不要关闭,保留一个单例的MongoClient一直用就可以了。

    回覆
    0
  • 取消回覆