Node.js使用mysql模块连接数据库时遇‘server closed the connection’错误求助
搞定Node.js连接数据库时的"Connection lost: The server closed the connection"错误
嘿,我一眼就揪出问题所在了——你用错数据库驱动啦!
你配置里写的端口是1521,这可是Oracle数据库的默认端口,但你却在用专门给MySQL设计的mysql模块来连接,这俩数据库的通信协议完全不一样,根本不兼容!难怪你用Putty(应该是用Oracle的客户端工具比如sqlplus?)能正常查询,Node这边直接被服务器断开连接了。
下面给你一步步解决的办法:
第一步:换对驱动模块
别再用mysql模块了,换成Oracle官方维护的oracledb模块,这是专门为Node.js连接Oracle数据库打造的驱动。
先安装模块
打开终端执行:
npm install oracledb
改写你的代码
我给你适配了你的需求,把原来的mysql代码改成oracledb的写法:
const oracledb = require('oracledb'); // 对应你原来的连接参数,注意connectString的格式 const dbConfig = { user: "someuser", password: "********", connectString: "10.90.103.4:1521/db" // 格式为「主机地址:端口/数据库服务名」,db对应你原来的database字段 }; async function queryExceptionRecord() { let conn; try { // 建立数据库连接 conn = await oracledb.getConnection(dbConfig); console.log("数据库连接成功!"); // 执行查询,用绑定变量更安全,也符合Oracle的最佳实践 const result = await conn.execute( `SELECT * FROM CLE_EXCEPTIONRECORD WHERE CORRELATIONID = :correlationId`, ['983b2f58-e0eb-49cb-b76c-9b8107de3edc'] ); // 打印查询结果 console.log("查询结果:"); console.log(result.rows); } catch (err) { console.error("出错啦:", err); } finally { // 最后务必关闭连接,避免资源泄漏 if (conn) { try { await conn.close(); console.log("连接已关闭"); } catch (closeErr) { console.error("关闭连接时出错:", closeErr); } } } } // 调用查询函数 queryExceptionRecord();
第二步:处理可能的客户端依赖问题
如果运行时提示找不到Oracle客户端,你需要安装Oracle Instant Client,然后把它的路径加到系统环境变量PATH里;或者在代码里用oracledb.initOracleClient()方法指定客户端路径,比如:
// Windows系统示例 oracledb.initOracleClient({ libDir: 'C:\\path\\to\\instantclient' }); // Mac/Linux系统示例 // oracledb.initOracleClient({ libDir: '/usr/lib/oracle/19.3/client64/lib' });
为啥原来的代码不行?
简单来说:mysql模块只懂MySQL的通信协议,Oracle用的是完全不同的协议,你拿MySQL的驱动去连Oracle服务器,服务器根本看不懂你的请求,直接就把连接关了,这就是你看到那个错误的核心原因。
最后再确认下:你的数据库用户权限没问题(毕竟Putty能正常连接),只要换对驱动,应该就能顺利查到数据啦!
内容的提问来源于stack exchange,提问作者johny
相关产品推荐
相关产品推荐

