在节点应用程序之间共享猫鼬连接

时间:2020-07-21 17:28:56

标签: javascript node.js

作为学习节点实践的一部分,试图在整个节点应用程序之间共享一个猫鼬连接,我能够做到这一点的一种方法是通过使用下面给出的global

global.db = global.db?global.db:mongoose.createconnection("127.0.0.1/test",{useNewUrlParser:true,function(err){console.log(err)}});

有没有更好的方法可以实现这一目标,我可以想到的一种方法是使用单例模式

2 个答案:

答案 0 :(得分:1)

在节点中,如果您多次require多次使用同一模块,则只有第一次运行该模块中的代码。实际上,其他require最终获得了对同一导出内容的引用。因此,您只需require("mongoose")即可在需要连接的任何地方进行,而实际的连接逻辑仅出现一次。

答案 1 :(得分:0)

我建议您使用Dependency Injection模式。这将使模拟和测试容易得多。例如:

example.model.js

class ExampleModel {
  constructor(db) {
    this._db = db;
  }

  doSomething() {
    return this._db.findAll();
  }
}

example.service.js

class ExampleService {
  constructor(model) {
    this._model = model;
  }

  doSomething() {
    return this._model.doSomething();
  }
}

index.js

async function run() {
  const conn = await createConnection(); // your connection logic
  const model = new ExampleModel(conn);
  const service = new ExampleService(model);
  const result = await service.doSomething();
  console.log(result);
}

run();