我正在尝试将 Informix 与 nodejs on 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文件或注册表中列出。
任何人都可以帮助我解决这个问题吗?
事实证明,您必须在环境配置中为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
...
}