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