You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,步骤如下:

  1. 下载Oracle Instant Client 11.2版本:根据你的64位Windows系统,下载对应版本的Instant Client基础包。
  2. 配置环境变量:将Instant Client解压后的路径添加到系统PATH环境变量中。
  3. 修改代码启用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,操作步骤:

  1. 卸载当前版本的oracledb:
    npm uninstall oracledb
    
  2. 安装5.x稳定版本(比如5.5.0):
    npm install oracledb@5.5.0
    
  3. 你的原有代码可直接使用(建议改为async/await语法提升可读性)。

注意事项

  • 方案一的Instant Client版本需与数据库版本兼容,11.2版本的Instant Client可正常连接Oracle 11g。
  • 方案二的5.x版本已停止维护,长期来看建议升级数据库到Oracle 12c及以上版本,以使用node-oracledb的最新特性和安全更新。

内容的提问来源于stack exchange,提问作者ps938w

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:27:18