Node.js 我应该在一个节点端点中打开/关闭不同的Postgres连接吗?使用面向对象编程实现这一点

Node.js 我应该在一个节点端点中打开/关闭不同的Postgres连接吗?使用面向对象编程实现这一点,node.js,postgresql,pg-promise,Node.js,Postgresql,Pg Promise,我正在为我的节点服务器设置从数据库(postgres)加载适当信息的功能,以呈现特定的客户端视图。我目前正在重构我的服务器代码,以遵循面向对象的方法和类构造函数 我目前拥有它,因此阅读器是一类函数,负责在我的数据库上运行读取查询。我继承了像MainViewReader和MatchViewReader这样的类,它们都继承自一个“Reader”类,该类使用pg promise库来实例化与postgres的连接 问题是我不能使用两个视图阅读器,否则它们会打开重复的连接,因此我发现自己在编写冗余代码。所

我正在为我的节点服务器设置从数据库(postgres)加载适当信息的功能,以呈现特定的客户端视图。我目前正在重构我的服务器代码,以遵循面向对象的方法和类构造函数

我目前拥有它,因此
阅读器
是一类函数,负责在我的数据库上运行读取查询。我继承了像
MainViewReader
MatchViewReader
这样的类,它们都继承自一个“Reader”类,该类使用pg promise库来实例化与postgres的连接

问题是我不能使用两个视图阅读器,否则它们会打开重复的连接,因此我发现自己在编写冗余代码。所以我相信我有两种设计选择,我想知道什么更有效:

  • 而不是通过servlet视图将模式设置为 表使用该类读取的模式,即
    NewsTableReader
    MatchTableReader
    。这方面的专业人士没有 该代码是冗余的,可以在不同的servlet、Con中使用 我必须在每一天结束与博士后的联系 在实例化新的Reader类之前,请执行以下操作:
  • const NewsTableReader=NewsTableReader()
    等待NewsTableReader.close()
    常量MatchTableReader=MatchTableReader()
    等待MatchTableReader.close()
    
  • 只有查看阅读器。专业的是,这只是一个持久的 连接,缺点是如果我 从不同视图中的相同表加载数据,例如:
  • 常量MatchViewReader=MatchViewReader() 等待MatchViewReader.load_news() 等待MatchViewReader.load_matches()
    哪种方法对我的性能影响最大?

    您已正确确定不应使用相同的连接选项创建多个连接池。但这并不一定会影响代码的结构

    您可以创建一个全局池,并将其作为一种:

    类读取器{
    构造函数(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中创建一个新的存储库对象是一个缺点时,您的意思是什么?为什么这是一个问题?我的想法是,这可能会对性能产生影响,特别是对几十个存储库而言。这并不是一个真正的缺点,更像是一个需要解决的问题记住,在大多数情况下,这可能是无关紧要的。