#javascript #node.js #postgresql #node-postgres
#javascript #node.js #postgresql #node-postgres
Вопрос:
У меня есть приложение, в котором мне нужно создать новую базу данных для новой компании, которая подписывается на использование этого приложения. Итак, я поддерживаю основную базу данных, в которой хранится этот список компаний и их соответствующие имена баз данных. Теперь, когда новой компании необходимо использовать это недавно подписанное приложение, мне нужно создать новое Pool
для их базы данных для использования. Как создать его программно и экспортировать в node.js
?
Я попробовал способ. Я думал, что пул — это простой объект, поэтому я попытался создать его после создания базы данных и сохранить его в главной базе данных и пытался использовать этот объект пула всякий раз, когда это требуется (мне достаточно одного пула, и я не хочу отключать пул, поскольку он должен работать 24/7, чтовот почему я его сохранил). Но я потерпел неудачу со следующим заявлением об ошибке, когда попытался подключиться к нему
TypeError: myPool.connect is not a function
потому что, как только я сохраняю его как jsonb в masterdb, он больше не является пулом.
Предложения о том, как подойти к этому, будут полезны.
Комментарии:
1. из документов просто создайте новый пул (config) и передайте host, user, timeout и т. Д., И у вас есть новый объект пула. вы можете создать любую функцию и просто вернуть ее из этой функции. если yourPool.connect не является функцией, вероятно, yourPool не является пулом. : P
2. Мой вопрос заключался в том, как создать этот пул программно и экспортировать его для других файлов. Я не должен создавать пул каждый раз, когда хочу его использовать. Мне нужно создать его один раз при создании новой базы данных и экспортировать ее. Мне также нужно иметь доступ к предыдущим пулам. В принципе, мне нужно несколько пулов, которые где-то хранятся и экспортируются.
Ответ №1:
// eg. poolBuilder
const { Pool } = require('pg')
const pools = new Map();
function getPool(companyName){
if(!pools.has(companyName){
pools.set(companyName, new Pool({
host: 'localhost',
user: 'database-user',
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
}))
}
return pools.get(companyName);
}
module.exports.getPool = getPool;
const {getPool} = require("poolBuilder");
const pool = getPool();
Комментарии:
1. Трюк заключается
!pool
в том, чтобы не создавать пул более одного раза. Спасибо. Теперь я сделаю эту переменную пула объектом и сделаюif(pool.companyName === undefined)
в вашем коде иreturn pool.companyName
. Это правильно?2. да. если вам нужно больше пулов, вы можете сохранить их в object или, что более правильно, в качестве dictionary, это означает new Map() . но это может быть и object