Вопрос или проблема
Я пытаюсь обновить свое приложение на Node.js до версии 22, но сталкиваюсь с проблемами при подключении к Oracle DB с использованием node-oracledb в толстом режиме. Тот же конфигурация работает без проблем в Node 20, но с Node 22 я получаю следующую ошибку:
NJS-045: невозможно загрузить бинарный файл node-oracledb для толстого режима для Node.js. Пожалуйста, попробуйте использовать тонкий режим.
Искал в D:\...\my-project\node_modules\oracledb\build\Release\oracledb-6.6.0-win32-ia32.node, ...
Среда:
- Версия Node.js: 22.11.0
- Версия node-oracledb: 6.6.0
- Oracle Instant Client:
C:\oracle\instantclient_basic_windows_x64_23_5_0_24_07\instantclient_23_5
- ОС: Windows
Фрагмент кода:
Вот соответствующая часть кода, где я инициализирую клиент Oracle:
const oracledb = require('oracledb');
const knex = require('knex');
const libDir = "C:\\oracle\\instantclient_basic_windows_x64_23_5_0_24_07\\instantclient_23_5";
oracledb.initOracleClient({ libDir });
const client = knex({
client: 'oracledb',
connection: {
user: config.oracle.user,
password: config.oracle.password,
connectString: config.oracle.connectionString
},
pool: {
min: config.connectionPool.min,
max: config.connectionPool.max,
idleTimeoutMillis: config.connectionPool.idleTimeout
},
acquireConnectionTimeout: config.connectionPool.acquireConnectionTimeout
});
const result = await client.raw('SELECT 1 FROM DUAL');
Детали ошибки
С Node 22 я получаю следующую ошибку:
Ошибка: NJS-045: невозможно загрузить бинарный файл node-oracledb для толстого режима для Node.js. Пожалуйста, попробуйте использовать тонкий режим.
Искал в D:\...\my-project\node_modules\oracledb\build\Release\oracledb-6.6.0-win32-ia32.node, ...
Попробованные шаги
- Проверил, что путь
libDir
правильный и указывает на Instant Client. - Подтвердил, что переменная окружения
PATH
включает путь к Oracle Instant Client. - Временно понизил версию до Node 20 и подтвердил, что эта настройка работает без ошибок.
Вопросы
- Есть ли конкретное требование по версии Instant Client для использования
node-oracledb
в толстом режиме с Node 22? - Требуются ли дополнительные конфигурации в Node 22 для поддержки толстого режима Oracle DB?
- Как я могу провести дальнейшую диагностику, чтобы выявить причину сбоя загрузки бинарного файла толстого режима?
Буду признателен за любые идеи или предложения!
Ответ или решение
Ошибка NJS-045: Не удается загрузить бинарник Thick mode для Node.js
При попытке обновить ваше приложение на Node.js до версии 22, вы столкнулись с проблемой подключения к Oracle DB с использованием библиотеки node-oracledb в Thick Mode. Данная ошибка, как правило, связана с несовместимостью версий, нехваткой необходимых библиотек или неправильной конфигурацией среды. В этом ответе мы подробнее рассмотрим возможные причины возникновения ошибки NJS-045 и предложим решения.
Обзор проблемы
Согласно вашей информации:
- Версия Node.js: 22.11.0
- Версия node-oracledb: 6.6.0
- Oracle Instant Client: путь указан верно
- Операционная система: Windows
Ошибка говорит о том, что не удалось загрузить бинарный файл для Thick mode, что может означать, что нужный бинарный файл не скомпилирован для вашей версии Node.js или отсутствуют компоненты Instant Client, необходимые для работы.
1. Требования к версии Instant Client
Для корректной работы node-oracledb в Thick Mode важно использовать совместимую версию Oracle Instant Client. Убедитесь, что используемая версия Instant Client поддерживается вашей версией node-oracledb. На текущий момент для node-oracledb версии 6.x оптимальной будет версия Instant Client 19.x и выше, однако иногда стоит проверять на сайте Oracle последние совместимые версии, так как могут быть изменения в релизах.
2. Дополнительные конфигурации для Node 22
Node.js версии 22 может включать изменения в архитектуре и API, которые может потребоваться учитывать. Проверьте следующее:
- Совместимость архитектур: Убедитесь, что ваш Node.js и Instant Client имеют одинаковую архитектуру (например, обе 64-битные).
- node-gyp: Убедитесь, что у вас установлены инструменты сборки для вашей платформы, такие как Python 3 и требуемые заголовочные файлы для C++. Если библиотека node-oracledb была установлена через npm без компиляции, попробуйте переустановить её с флагом настройки:
npm install oracledb --build-from-source --unsafe-perm
3. Устранение неполадок
Для дальнейшего устранения неполадок выполните следующие шаги:
-
Логи: Проверьте логи npm и системные логи на предмет получения более подробной информации о том, что происходит в момент загрузки бинарника.
-
Проблемы с путями: Возможно, ваш проект пытается подключиться к бинарю в другом месте. Убедитесь, что файл
oracledb-6.6.0-win32-ia32.node
существует в указанной директории. Также полезно вручную указать путь кlibDir
, как вы уже сделали. -
Проверка среды: Убедитесь, что ваши пути среды корректно настроены, особенно переменная
PATH
, где должна присутствовать директория Instant Client.
Заключение
Если ни одно из предложенных решений не помогло, вы можете временно вернуться к Node.js 20, пока не будут готовы обновления для node-oracledb или вы не найдете несовместимость с вашей средой. Также рекомендуется следить за обновлениями документации на официальном сайте node-oracledb, так как разработчики могут предоставлять информацию о совместимости и обновлениях.
Если у вас возникнут дополнительные вопросы или потребуется помощь, поделитесь дополнительными данными о конфигурации, и мы постараемся помочь вам более детально.