Проблемы установки IBM Informix NodeJS - значение INFORMIXSERVER не указано в файле sqlhosts или реестре - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь подключить Informix с NodeJS на MacOS , но сталкиваюсь с проблемами при правильной настройке среды.

В моем ~/.bash_profile У меня есть следующее:

export INFORMIXDIR=/Applications/IBM/informix
export PATH=$INFORMIXDIR/bin:$PATH
export CSDK_HOME=/Applications/IBM/informix
export INFORMIXSQLHOSTS=/Users/username/Documents/sqlhosts

export LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql:$INFORMIXDIR/lib/cli

Как вы можете видеть, я указал переменную INFORMIXSQLHOSTS для локального файла, а не по умолчанию $INFORMIXDIR/etc/sqlhosts, так как я не мог понять множественное числопримеры файлов в этом каталоге.

Мой локальный файл для sqlhosts выглядит так:

#INFORMIXSERVER
informix_server     onsoctcp    localhost   my_alias

Затем я запускаю файл моего узла index.js:

const opts = {
    database: 'db_name@informix_server',
    username: 'user',
    password: 'password'
};
const informix = require('informix')(opts)

informix.query('select name from table')
    .then(cursor => {
        return cursor.fetchAll({close: true});
    })
    .then(results => {
        console.log('results:', results);
    })
    .catch(err => {
        console.log(err);
    });

Когда я запускаю это с node index.js, я получаю сообщение об ошибке:

Ошибка: [-25596] Значение INFORMIXSERVER отсутствует в файле sqlhosts или реестре.

Может ли кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 29 мая 2019

Оказывается, вам необходимо иметь значение по умолчанию для INFORMIXSERVER в конфигах среды. Это может быть что угодно. Он вступает в игру только в том случае, если вы не указываете имя сервера при попытке подключения в коде. Обычно мы пишем db_name @ server_name, однако, если мы опускаем @server_name, он подключается к значению по умолчанию, определенному в переменных среды.

Например: В переменных среды я определяю:

export INFORMIXSERVER=server_name

Затем в коде я бы подключился к другому серверу с именем my_server следующим образом:

const opts = {
  database: 'my_db@my_server', // I specify the db name and the server name
  username: 'user',
  password: 'pass'
}

const infx = require('Informix')(opts);

Принимая во внимание, что если я опущу имя сервера:

const opts = {
  database: 'my_db',
  ...
}

Код будет интерпретировать это так:

const opts = {
  database: 'my_db@server_name', // server name defined in INFORMIXSERVER
  ...
}
...