【发布时间】:2021-08-03 19:04:12
【问题描述】:
长话短说,我希望从myModule 导出的对象仅在第一个脚本连接到数据库后创建;然后与任何需要它的脚本共享myObject。这可以做到吗?做同样事情的更聪明的选择是什么?
//mainapp.js
const mongoose = require('mongoose');
/*application setup stuff*/
mongoose.connect(/*...*/);
//myModule.js
const mongoose = require('mongoose');
class myClass {
constructor(){
/*db operations*/
this.myVar = /*...*/;
}
}
module.exports = new myClass();
//script.js,script2.js,script3.js...
import myObject = require('./myModule');
/*...*/ = myObject.myVar;
【问题讨论】:
-
你已经用
express标记了这个,这意味着你在启动服务器时建立了连接。然后你只在路由处理程序中运行查询代码。问题解决了。 (导出类,而不是实例,稍后再创建实例) -
@ChrisG 但是如果我导出类,那么我不能将同一个实例导入多个脚本:\我错了吗?
-
您可以使用singleton pattern。如果对象尚不存在,则导出创建对象并返回它的函数。这样所有模块都将使用相同的实例。
-
@ChrisG 这正是我正在寻找的答案,如果你以答案的形式写出来,我可以标记它。您是否必须推荐更聪明的方法来做同样的事情?我想要做的是有一个我从数据库加载一次的结构,以便在不同的脚本中重用。我知道我可以避免使用数据库,但我正在努力解决。
-
我又看了一遍,导出实例应该可以正常工作。只要在实例初始化后访问它的道具,我不明白为什么它不应该,但我还没有测试它。你试过这个并遇到问题吗?
标签: javascript node.js express mongoose