作为学习节点实践的一部分,试图在整个节点应用程序之间共享一个猫鼬连接,我能够做到这一点的一种方法是通过使用下面给出的global
global.db = global.db?global.db:mongoose.createconnection("127.0.0.1/test",{useNewUrlParser:true,function(err){console.log(err)}});
有没有更好的方法可以实现这一目标,我可以想到的一种方法是使用单例模式
答案 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();