Node.js连接Oracle数据库失败求助(含NJS-045/DPI-1047报错)
Node.js连接Oracle数据库:解决NJS-045/DPI-1047错误
我之前也碰到过一模一样的问题,这个报错的核心原因很明确:node-oracledb模块依赖64位的Oracle客户端库,但你的系统里要么没装,要么路径没配置对。下面是一步步的解决方法:
步骤1:安装64位Oracle Instant Client
node-oracledb不能直接连接Oracle,必须依赖Oracle官方的客户端库。你需要下载对应版本的64位Instant Client包:
- 选择Basic或Basic Light版本(Basic功能更全,Basic Light体积更小)
- 确保版本和你的Node.js位数匹配(你的是win32 x64,所以选x64包),同时尽量和目标Oracle数据库版本兼容(比如数据库是11g就选11g的客户端,19c就选19c的)
解压下载的压缩包到一个固定路径,比如C:\oracle\instantclient_19_12。
步骤2:配置系统PATH环境变量
把刚才解压的Instant Client路径添加到系统的PATH环境变量中:
- 右键“此电脑” → 属性 → 高级系统设置 → 环境变量
- 在系统变量里找到
PATH,点击编辑,添加C:\oracle\instantclient_19_12(替换成你的实际路径) - 注意:如果PATH里有其他32位Oracle相关的路径,把64位的路径移到最前面,避免优先级冲突
步骤3:安装对应版本的Visual Studio Redistributable
Oracle客户端库依赖微软的VS运行时库,不同版本的Instant Client对应不同的VS版本:
- 比如Instant Client 19c需要VS 2017的x64 Redistributable
- 安装完成后记得重启你的终端或IDE,让所有环境变量生效
步骤4:检查并优化你的连接代码
你的代码本身逻辑没问题,但可以调整成async/await风格更易维护,同时注意connectString的格式(默认Oracle端口是1521,如果你的数据库用了其他端口要加上):
const oracledb = require('oracledb'); async function connectToOracle() { let connection; try { // 建立连接 connection = await oracledb.getConnection({ user: "你的用户名", password: "你的密码", connectString: "192.168.177.106:1521/mymmsrev-local" // 补充端口号 }); console.log('✅ Oracle数据库连接成功!'); // 这里可以添加查询等业务逻辑,比如: // const result = await connection.execute('SELECT * FROM YOUR_TABLE'); // console.log(result.rows); } catch (err) { console.error('❌ 连接失败:', err.message); } finally { // 确保连接关闭 if (connection) { try { await connection.close(); console.log('🔌 连接已关闭'); } catch (err) { console.error('❌ 关闭连接失败:', err.message); } } } } // 执行连接函数 connectToOracle();
额外注意事项
- 确认你的Node.js是64位版本(你当前用的是8.9.4 x64,符合要求)
- 如果你的电脑上之前装过Oracle数据库本地客户端,也要确保它的64位库路径在PATH里,或者直接用Instant Client更轻便
- 测试连接前一定要重启终端/IDE,否则新的PATH配置不会生效
内容的提问来源于stack exchange,提问作者Ajay Thakur




