Я использую pg-обещание для создания приложения API. На основании предоставленного URL-запроса приложение должно подключиться к нужной базе данных и соответственно предоставить API. Например:
- localhost: 3000 / data /: organizationId # 1 / data ==> подключиться к базе данных # 1 ==> ответ с данными # 1
- localhost: 3000 /data /: organizationId # 2 / data ==> подключиться к базе данных # 2 ==> ответ с данными # 2
Насколько я понимаю, мне нужна какая-то логика для подключения к нужномубазы данных на основе URL, поэтому я попытался изменить строку подключения на основе переданного запроса, как показано в коде ниже.
Теперь эта установка отлично работает как демонстрационная версия, но она не практична, поскольку в случае нескольких запросов я легко достигаю max_connections
и получаю сообщение об ошибке sorry, too many clients already
до всех открытых запросов. закрыты.
Есть ли лучший способ справиться с этой проблемой? может быть, чтобы динамически проверить, нужно ли новое соединение перед тем, как фактически соединиться (то есть, чтобы избежать достижения максимального количества соединений)?
const config = require('config');
const squel = require('squel').useFlavour('postgres');
const pgp = require('pg-promise')();
function Model(koop) {}
Model.prototype.getData = function (req, callback) {
if (req.organizationId === '1') {
let db = pgp(config.db.postgis1); //connection based on organization Id #1
}
if (req.organizationId === '2') {
let db = pgp(config.db.postgis2); //connection based on organization Id #2
}
db
.query(formatSQL(req))
.then(function (data) {
// some function
})
.catch(function (err) {
callback({
'error': 'error running query',
'error_details': err
});
})
.finally(pgp.end());
}
function formatSQL(req) {
//some function
}
module.exports = Model