Express连接Oracle数据库失败求助:NJS-138错误
解决node-oracledb 6.x无法连接Oracle 11g的问题
错误原因
你遇到的NJS-138错误是因为node-oracledb 6.x版本的Thin驱动不再支持Oracle 11g(11.2.0.2.0)。从node-oracledb 6开始,Thin模式最低要求Oracle数据库版本为12.1.0.2及以上,而你的数据库是11g Express Edition,超出了支持范围。
解决方案一:启用node-oracledb Thick模式
Thick模式依赖Oracle Instant Client,支持连接Oracle 11g,步骤如下:
- 下载Oracle Instant Client 11.2版本:根据你的64位Windows系统,下载对应版本的Instant Client基础包。
- 配置环境变量:将Instant Client解压后的路径添加到系统
PATH环境变量中。 - 修改代码启用Thick模式:
在index.js中初始化Oracle客户端并改用async/await语法(比回调更易维护):const oracledb = require("oracledb"); oracledb.outFormat = oracledb.OUT_FORMAT_OBJECT; var connectionProperties = { user: process.env.DBAAS_USER_NAME || "hr", password: process.env.DBAAS_USER_PASSWORD || "hr", connectString: process.env.DBAAS_DEFAULT_CONNECT_DESCRIPTOR || "localhost/xe", }; async function run() { try { // 启用Thick模式,需在getConnection前调用 await oracledb.initOracleClient(); // 建立连接 const connection = await oracledb.getConnection(connectionProperties); console.log("数据库连接成功"); // 示例查询(可选) const result = await connection.execute("SELECT * FROM dual"); console.log(result.rows); // 关闭连接 await connection.close(); } catch (err) { console.error(err.message); } } run();
解决方案二:降级node-oracledb到5.x版本
node-oracledb 5.x的Thin模式仍支持Oracle 11g,操作步骤:
- 卸载当前版本的oracledb:
npm uninstall oracledb - 安装5.x稳定版本(比如5.5.0):
npm install oracledb@5.5.0 - 你的原有代码可直接使用(建议改为
async/await语法提升可读性)。
注意事项
- 方案一的Instant Client版本需与数据库版本兼容,11.2版本的Instant Client可正常连接Oracle 11g。
- 方案二的5.x版本已停止维护,长期来看建议升级数据库到Oracle 12c及以上版本,以使用node-oracledb的最新特性和安全更新。
内容的提问来源于stack exchange,提问作者ps938w
相关产品推荐
相关产品推荐

