网上教程有点不清楚,博主认为可以分几步走:
1、首先是node项目中要引用依赖包
const oracledb = require('oracledb');
2、去到linux服务器安装oracle的client,下载地址:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
有两种方式安装,可参考这篇博文:https://blog.youkuaiyun.com/zklth/article/details/7184032
博主选择rpm的安装文件,下载文件同时用ftp上传至linux服务器
oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.1.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.1.0-1.x86_64.rpm
3、使用命令行进行安装
rpm -ivh oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm
rpm -ivh oracle-instantclient11.2-sqlplus-11.2.0.1.0-1.x86_64.rpm
rpm -ivh oracle-instantclient11.2-devel-11.2.0.1.0-1.x86_64.rpm
安装完成后,ORACLE Instant Client 相关的头文件在 /usr/include/oracle/11.2/client64/下(sdk包中的),库文件在 /usr/lib/oracle/11.2/client64/下(cliient64目录下有 lib 和 bin两个目录)
4、去到根目录编辑 .bash_profile文件设置全局变量
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG='simplified chinese_china'.ZHS16GBK
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
编辑完后执行
source .bash_profile
5、 去到/usr/lib/oracle/11.2/client64/目录下新建文件夹/network/admin,同时在admin下创建 tnsnames.ora文件,
tnsnames.ora文件内容是连接数据库的配置,博主贴一下示例
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.232.131)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
6、回到nodejs项目,可以选择配置依赖路径
const oracledb = require('oracledb');
oracledb.initOracleClient({
libDir: '/usr/lib/oracle/11.2/client64/lib',
configDir: '/usr/lib/oracle/11.2/client64/network/admin'
});
7、最后编写连接数据库的方法,进行查询操作。
const oracledb = require('oracledb');
oracledb.initOracleClient({
libDir: '/usr/lib/oracle/11.2/client64/lib',
configDir: '/usr/lib/oracle/11.2/client64/network/admin'
});
module.exports = {
connect: (connectInfo) => {
return new Promise(async (resolve, reject) => {
let connection;
try {
connection = await oracledb.getConnection({
user: "user",
password: "pwd",
connectString: "1.1.1.1:8888/DB"
});
const result = await connection.execute(
`select * from Table`,
[],
);
return resolve(result.rows);
}
catch (err) {
return resolve(err.stack || err.message || "unknow error");
}
finally {
if (connection) {
try {
await connection.close();
}
catch (err) {
return resolve(err.stack || err.message || "unknow error");
}
}
}
return resolve(connection);
});
},
close: conn => {
conn.close(err => {
if (err) console.error(err.message);
console.log("关闭连接");
});
}
};