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

Node 22下使用node-oracledb Thick Mode遇NJS-045错误求助

升级Node.js 22后node-oracledb Thick Mode连接Oracle失败

我将Node.js应用升级到22版本后,使用node-oracledb的Thick Mode连接Oracle数据库时出现错误,相同配置在Node 20下可正常运行。

错误提示

NJS-045: cannot load a node-oracledb Thick mode binary for Node.js. Please try using Thin mode.
Looked for D:\...\my-project\node_modules\oracledb\build\Release\oracledb-6.6.0-win32-ia32.node, ...

环境信息

  • Node.js版本: 22.11.0
  • node-oracledb版本: 6.6.0
  • Oracle Instant Client: C:\oracle\instantclient_basic_windows_x64_23_5_0_24_07\instantclient_23_5
  • 操作系统: Windows

代码片段

const oracledb = require('oracledb');
const knex = require('knex');

const libDir = "C:\\oracle\\instantclient_basic_windows_x64_23_5_0_24_07\\instantclient_23_5";
oracledb.initOracleClient({ libDir });

const client = knex({
    client: 'oracledb',
    connection: {
        user: config.oracle.user,
        password: config.oracle.password,
        connectString: config.oracle.connectionString
    },
    pool: {
        min: config.connectionPool.min,
        max: config.connectionPool.max,
        idleTimeoutMillis: config.connectionPool.idleTimeout
    },
    acquireConnectionTimeout: config.connectionPool.acquireConnectionTimeout
});

const result = await client.raw('SELECT 1 FROM DUAL');

错误详情

Node 22中触发的完整错误:

Error: NJS-045: cannot load a node-oracledb Thick mode binary for Node.js. Please try using Thin mode.
Looked for D:\...\my-project\node_modules\oracledb\build\Release\oracledb-6.6.0-win32-ia32.node, ...

已尝试的排查步骤

  • 确认libDir路径正确,指向Oracle Instant Client目录
  • 确认系统PATH环境变量已包含Instant Client路径
  • 降级到Node 20后,配置可正常运行

疑问

  1. 使用node-oracledb Thick Mode搭配Node 22是否有特定的Instant Client版本要求?
  2. Node 22是否需要额外配置以支持Oracle Thick Mode?
  3. 如何进一步定位Thick Mode二进制文件加载失败的根本原因?

问题解答

1. Instant Client版本要求

node-oracledb 6.x系列对Node.js 22的支持,要求Oracle Instant Client 19.13+、21.7+或23.3+,你的23.5版本符合要求,但错误日志显示程序在寻找32位(win32-ia32)的node-oracledb二进制,而你使用的是64位Instant Client,架构不匹配是大概率的核心问题。

2. Node 22的额外配置

Node.js 22本身无需特殊配置,但需注意两点:

  • 架构一致性:Node.js、node-oracledb二进制、Oracle Instant Client三者的32/64位架构必须完全一致。如果当前Node.js是32位,要么换成64位Node.js,要么安装32位Instant Client。
  • 重新安装依赖:升级Node.js后,必须删除node_modules和package-lock.json(或yarn.lock),重新执行npm install,确保node-oracledb针对Node.js 22的ABI重新编译或下载适配的预编译包。

3. 进一步排查方法

  • 检查Node.js架构:执行命令 node -p "process.arch",输出x64为64位,ia32为32位,和Instant Client架构对比。
  • 启用调试日志:在代码最开头添加 process.env.NODE_ORACLEDB_DEBUG = '1';,运行后会输出详细的二进制加载过程日志,定位具体失败环节。
  • 验证Instant Client可用性:直接运行Instant Client目录下的sqlplus.exe,尝试连接数据库,确认客户端本身可正常工作。
  • 检查权限:确保Node.js进程有读取node_modules/oracledb下二进制文件及Instant Client目录的权限。

内容的提问来源于stack exchange,提问作者Pessi S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:01:06