Node.js 我应该在一个节点端点中打开/关闭不同的Postgres连接吗?使用面向对象编程实现这一点
我正在为我的节点服务器设置从数据库(postgres)加载适当信息的功能,以呈现特定的客户端视图。我目前正在重构我的服务器代码,以遵循面向对象的方法和类构造函数 我目前拥有它,因此Node.js 我应该在一个节点端点中打开/关闭不同的Postgres连接吗?使用面向对象编程实现这一点,node.js,postgresql,pg-promise,Node.js,Postgresql,Pg Promise,我正在为我的节点服务器设置从数据库(postgres)加载适当信息的功能,以呈现特定的客户端视图。我目前正在重构我的服务器代码,以遵循面向对象的方法和类构造函数 我目前拥有它,因此阅读器是一类函数,负责在我的数据库上运行读取查询。我继承了像MainViewReader和MatchViewReader这样的类,它们都继承自一个“Reader”类,该类使用pg promise库来实例化与postgres的连接 问题是我不能使用两个视图阅读器,否则它们会打开重复的连接,因此我发现自己在编写冗余代码。所
阅读器
是一类函数,负责在我的数据库上运行读取查询。我继承了像MainViewReader
和MatchViewReader
这样的类,它们都继承自一个“Reader”类,该类使用pg promise库来实例化与postgres的连接
问题是我不能使用两个视图阅读器,否则它们会打开重复的连接,因此我发现自己在编写冗余代码。所以我相信我有两种设计选择,我想知道什么更有效:
NewsTableReader
“MatchTableReader
。这方面的专业人士没有
该代码是冗余的,可以在不同的servlet、Con中使用
我必须在每一天结束与博士后的联系
在实例化新的Reader类之前,请执行以下操作:const NewsTableReader=NewsTableReader()
等待NewsTableReader.close()
常量MatchTableReader=MatchTableReader()
等待MatchTableReader.close()
哪种方法对我的性能影响最大?您已正确确定不应使用相同的连接选项创建多个连接池。但这并不一定会影响代码的结构 您可以创建一个全局池,并将其作为一种:
类读取器{
构造函数(db){
这个。_db=db
}
}
类NewsTableReader扩展读取器{}
类MatchTableReader扩展读取器{}
const pgp=require('pg-promise')(/*库选项*/)
const db=(/*连接选项*/)
const newstableader=新的newstableader(db)
常量matchTableReader=新matchTableReader(db)
等待newsTableReader.load()
等待matchTableReader.load()
//等待承诺。全部([newsTableReader.load(),matchTableReader.load()]))
另一种方法是在pgpromise
库的事件中使用相同的类:
const pgp=require('pg-promise')({
扩展(obj,dc){
obj.newsTableReader=新的newsTableReader(obj);
obj.matchTableReader=新的matchTableReader(obj);
}
})
const db=(/*连接选项*/)
等待db.newstablereder.load()
等待db.tx(异步t=>{
const news=wait t t.newstablereder.load();
const match=wait t t.matchTableReader.load();
返回{news,match};
});
extend
事件的好处是,您可以跨不同的模型使用pg promise
库提供的所有功能(例如和)。需要记住的是,它会在每个db.task()
、db.tx()
和db.connect()上创建新对象
call.有关一个好的示例,请参阅。当您说在task/tx/connect中创建一个新的存储库对象是一个缺点时,您的意思是什么?为什么这是一个问题?我的想法是,这可能会对性能产生影响,特别是对几十个存储库而言。这并不是一个真正的缺点,更像是一个需要解决的问题记住,在大多数情况下,这可能是无关紧要的。