【问题标题】:Node.js and managing MongoDB databases [duplicate]Node.js 和管理 MongoDB 数据库 [重复]
【发布时间】:2018-10-22 00:56:45
【问题描述】:

我需要你的建议。

我想处理具有多个 MongoDB 数据库的服务器并管理它们 throw rest API (node.js)。

如何管理我的数据库? 当服务器启动时连接到所有数据库不是一个好主意。连接到数据库以在 DB 中创建文档并在此之后断开连接听起来也不是一个好主意... 那么我该怎么做呢?存储一个带有连接的阵列并在几分钟未使用后断开连接?你怎么看?

【问题讨论】:

  • 这些数据库是否都在同一个 mongoDB 中,或者它们是完全不同的实例?
  • 实现连接池
  • @DanCrews 现在它是一个单一的 mongoDB。但是未来如果项目发展快的话,会有几个实例。
  • @itsundefined 更多细节请

标签: node.js linux mongodb


【解决方案1】:

是的,我可能会做类似于您所描述的事情。我无法告诉您此代码是否功能齐全,但请花五分钟了解一下:

class TimedConnection {
  constructor(uri) {
    this.uri = uri;
    this._connected = false;
    this.disconnect = this.disconnect.bind(this);
  }

  connect() {
    return new Promise((resolve, reject) => {
      if (!this._connected) {
        const db = this.db = mongoose.createConnection(this.uri);

        db.once('open', resolve());
        // whatever
      }

      clearTimeout(this._connectionTimeout);
      this._connectionTimeout = setTimeout(this.disconnect, 300000)

      return resolve(this.db);
    })
  }

  query() {
    this.connect().then((db) => {
      // something with `db`
    })
  }

  disconnect() {
    this.db.disconnect();
    this._connected = false;
  }
}

const connectionMap = {
  objectsDatabase: new TimedConnection('mongodb://whatever'),
  personsDatabase: new TimedConnection('mongodb://whateverthing'),
  ...
};

【讨论】:

  • 谢谢!非常好的解决方案。我会试试看。但我有一个小问题:“this.disconnect = this.disconnect.bind(this);”的目的是什么在构造函数中?
  • 因为我们将this.disconnect 传递给setTimeout 函数,this 关键字将失去其上下文,并且该函数将不再工作。通过提前执行.bind,该函数会使用this 参数预先硬连线,因此不会发生这种情况。
猜你喜欢
  • 1970-01-01
  • 2021-09-30
  • 2012-03-08
  • 2012-10-24
  • 1970-01-01
  • 2019-11-18
  • 2012-02-16
  • 1970-01-01
  • 2014-05-31
相关资源
最近更新 更多