Node.js 在模块中实现单个实例的正确方法

Node.js 在模块中实现单个实例的正确方法,node.js,node-modules,Node.js,Node Modules,我正在尝试初始化模块中的DB连接,并将其传递给其他模块。 我的数据库连接模块(rdsconnection.js)是: 我想做些什么 const { pool, schema } = require('../modules/rdsconnection'); 在多个模块中,只希望返回单个池连接对象。 我假设我所做的if/else方法是错误的。 在模块中只初始化一次对象的正确方法是什么? 是否每次其他模块调用require()时都会运行模块中的代码 非常感谢。你把它复杂化了。Node.js模块只加载

我正在尝试初始化模块中的DB连接,并将其传递给其他模块。 我的数据库连接模块(
rdsconnection.js
)是:

我想做些什么

const { pool, schema } = require('../modules/rdsconnection');
在多个模块中,只希望返回单个
连接对象。 我假设我所做的
if/else
方法是错误的。 在模块中只初始化一次对象的正确方法是什么? 是否每次其他模块调用
require()
时都会运行模块中的代码


非常感谢。

你把它复杂化了。Node.js模块只加载一次,如果它们在程序中多次被
require
ed,则可以重用。您可以将其简化为:

const { Pool } = require('pg');
const dbParams = require('./configparams').getDbParams(); 
const schema = `${dbParams.db_schema || 'public'}.`;

// Connect to AWS RDS
const pool = pool = new Pool({
  user: dbParams.username,
  host: dbParams.host,
  database: dbParams.dbname,
  password: dbParams.password,
  port: dbParams.port
});

module.exports = { pool, schema };

我认为你做得对。这些模块无论如何不会运行多次。即使是这样,你的方法也确保只创建了一个实例。谢谢@AbhishekAnand。当我多次调用该模块时,我只得到第一个未初始化的
PG池。
消息。我没有;t get
PG已经初始化了
,所以我假设有什么不对劲。或者您可以创建类,ES6代码谢谢您修复了
模式
语句:)您链接的文档提到
将返回完全相同的对象,如果它将解析为相同的文件。
。这是否意味着如果我调用
require(./rdsconnection)
,然后调用
require(../modules/rdsconnection)
,它将执行两次?@madu no。如果这样,它将从缓存中获取
模块。导出
对象。谢谢你。在什么情况下,单个模块文件将解析为不同的文件?
const { Pool } = require('pg');
const dbParams = require('./configparams').getDbParams(); 
const schema = `${dbParams.db_schema || 'public'}.`;

// Connect to AWS RDS
const pool = pool = new Pool({
  user: dbParams.username,
  host: dbParams.host,
  database: dbParams.dbname,
  password: dbParams.password,
  port: dbParams.port
});

module.exports = { pool, schema };