Невозможно подключить две базы данных в Express

У меня возникла проблема при одновременном использовании двух БД (оба оракула). Моя функция startup выполняет только блок перехвата первой попытки соединения, но показывает сообщение о подключении console.info для блока перехвата второй попытки, но соединение никогда не устанавливается.

Вот моя функция startup:

async function startup() {
  try {
    console.info('Initializing SEI database module...');
    await seiDatabase.initialize();
  } catch (err) {
    console.error(err);
    process.exit(1); // Non-zero failure code
  }
  console.info('Starting SEI application...');

  try {
    console.info('Initializing SIP database module...');
    await sipDatabase.initialize();
  } catch (err) {
    console.error(err);
    process.exit(1); // Non-zero failure code
  }
  console.info('Starting SIP application...');

  try {
    console.info('Initializing web server module...');
    await webServer.initialize();
  } catch (err) {
    console.error(err);

    process.exit(1); // Non-zero failure code
  }
}
startup();

Я использую один и тот же webServer.initialize для обоих... Когда я пытаюсь использовать свой SIP-маршрут для получения данных, возвращается эта ошибка: message "ORA-00942: table or view does not exist", мой маршрут пытается получить данные из БД SIP, но подключена только БД SEI... Я неправильно делаю множественное соединение?

Я использую Node, Express и oracledb ^ 5.4.0 "... не использую TypeORM.

Откуда ты это знаешь only SEI DB is connected? Если это ошибка ORA-00942, которую вы получили после запроса в базе данных SIP, это означает, что вы подключены к базе данных SIP.

Rahul Sharma 14.09.2022 15:43

@RahulSharma Я изменил позиции try catch и позволил SIP DB сначала подключиться, и мой запрос начал работать ... и моя SEI DB (ранее первое соединение) перестала работать. Вот небольшое консольное сообщение: Initializing SEI database module... Starting SEI application... Initializing SIP database module... Starting SIP application... Initializing web server module... Web server listening on localhost:4242 Похоже, мой запрос пытается получить данные из БД SEI...

Lucas Marra 14.09.2022 15:55

Убедитесь, что у вас правильный диапазон переменных, иначе вы можете перезаписать переменную, содержащую соединение (или пул?) первой БД, с соединением (или пулом) для второй БД. Если вы используете два пула, обязательно назначьте, а затем используйте псевдоним пула (или передайте объект пула). Проверьте документ oracle.github.io/node-oracledb/doc/api.html#connpoolcache.

Christopher Jones 15.09.2022 03:57

@ChristopherJones, это сработало просто отлично! Я добавил poolAlias ​​в каждое соединение hrPool и назвал псевдоним в соединении... conn = await oracledb.getConnection('sipprod'); и conn = await oracledb.getConnection('seiprod'); Пожалуйста, сделайте ответ для решения.

Lucas Marra 15.09.2022 14:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы используете два пула, обязательно назначьте, а затем используйте псевдоним пула (или передайте объект пула). Ознакомьтесь с документом Кэш пула соединений.

Например, два пула могут быть созданы следующим образом:

await oracledb.createPool({
  user: 'hr',
  password: myhrpw, 
  connectString: 'localhost/XEPDB1',
  poolAlias: 'hrpool'
});

await oracledb.createPool({
  user: 'sh',
  password: myshpw,
  connectString: 'localhost/XEPDB1',
  poolAlias: 'shpool'
});

Затем вы получите соединение из нужного пула, указав его псевдоним. Например:

const connection = await oracledb.getConnection('hrpool');

. . . // Use connection from the HR pool

await connection.close();

Спасибо, указание того, какой пул мне нужен, решило проблему, использование oracledb.getConnection(); позволяло моему подключению только к первому пулу и не позволяло подключиться второму!

Lucas Marra 16.09.2022 14:01

Другие вопросы по теме