NodeJS / MongoDB:只连接一次到DB

时间:2017-08-14 20:13:05

标签: javascript node.js mongodb

我正在对nodeJS应用程序进行一些e2e测试。在前/后挂钩我需要添加/删除一些mongoDB文件,这就是我这样做的方法:

根本不可能只连接一次mongo服务器吗?

我想做什么:

  1. 删除开头的所有文档{ _id: articleId }(现在在代码中缺失)
  2. 将新文档插入数据库(collection.insertOne(articles.main)
  3. 完成测试后删除所有文档
  4. 我的代码对我不太好

    describe('article module', function () {
      before(function () {
        MongoClient.connect(mongoServer, (err, db) => {
          expect(err).to.be.null
          db.collection('content', (err, collection) => {
            expect(err).to.be.null
            collection.findOne({ _id: articleId }, (err, item) => {
              expect(err).to.be.null
              if (!item) collection.insertOne(articles.main)
              db.close()
            })
          })
        })
      })
    
      after(function () {
        MongoClient.connect(mongoServer, (err, db) => {
          expect(err).to.be.null
          db.collection('content', (err, collection) => {
            expect(err).to.be.null
            collection.remove({ _id: articleId }, (err, removed) => {
              expect(err).to.be.null
              db.close()
            })
          })
        })
      })
    })
    

1 个答案:

答案 0 :(得分:1)

describe('article module', () => {
  before(() => {

    MongoClient.connect(mongoServer, (err, db) => {
      expect(err).to.be.null

      const content = db.collection('content');

      content.findOne({ _id: articleId })
      .then(item => {
        return content.insertOne(articles.main);
      })
      .then(insertResult => {
        db.close();
      })
      .catch(err => {
        expect(err).to.be.null;
      })
    })

  })

  after(() => {
    MongoClient.connect(mongoServer, (err, db) => {
      expect(err).to.be.null

      const content = db.collection('content');

      content.remove({ _id: articleId })
      .then(removed => {
        db.close();
      })
      .catch(err => {
        expect(err).to.be.null;
      })
    })
  })
})

您也可以使用第三方承诺来调用数据库