Node.js连接MySQL报createConnection is not a function错误如何修复
Node.js调用MySQL查询报
createConnection is not a function修复方案 报错信息
TypeError: o.createConnection is not a function. (In 'o.createConnection(this.config.port,this.config.host)', 'o.createConnection' is undefined)
触发原因
- 依赖安装异常:未正确安装官方
mysql包,安装过程文件损坏,或装了同名第三方废弃包。 - 运行环境错误:将Node.js专属的
mysql库直接写在前端浏览器侧的点击事件逻辑中,打包工具压缩后模块导出结构被破坏,无法读取createConnection方法。注意:前端直连MySQL会直接暴露数据库账号密码,属于严重安全漏洞,绝对不能这么用。 - 导入写法不兼容:ES Module规范下未正确读取模块默认导出,拿到的对象不包含对应方法。
- 附带问题:原代码中的INSERT语句字段数量和传入值数量不匹配,且未做参数化处理,存在SQL注入风险,即使解决了当前报错也会触发SQL语法错误。
修复步骤
重新安装正确依赖
在项目根目录执行命令,清理异常依赖后重装官方包:npm uninstall mysql npm install mysql --save注意:
mysql是Node.js服务端专属依赖,只能在后端代码中引入,不能在前端React/Vue等浏览器端代码中导入。调整代码架构,拆分前后端逻辑
原代码把数据库操作直接写在前端onClick事件里的写法是完全错误的,需要把数据库逻辑全部挪到Node服务端:- 服务端初始化MySQL连接(推荐用连接池,稳定性比单连接更高):
// 以下代码写在Node服务端文件中 const mysql = require('mysql'); const connPool = mysql.createPool({ host: 'localhost', user: 'user_name', password: 'password', database: 'database_name', connectionLimit: 10 });- 服务端编写接口接收前端请求,执行数据库插入操作,使用参数化查询避免SQL注入,注意字段数和传入参数数量要一一对应:
// 以Express框架为例,其他框架逻辑一致 app.post('/api/add-order', (req, res) => { const { field1, field2, field3, field4, field5 } = req.body; const insertSql = "INSERT INTO Orders (field1, field2, field3, field4, field5) VALUES (?, ?, ?, ?, ?)"; connPool.query(insertSql, [field1, field2, field3, field4, field5], (err, result) => { if (err) { return res.status(500).json({ code: 500, msg: '插入失败' }); } res.json({ code: 200, msg: 'successful' }); }) })- 前端点击事件中只需要发送HTTP请求调用后端接口,不要引入
mysql包:
// 以下代码写在前端文件中 const onbClick = () => { fetch('/api/add-order', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ field1: a, field2: b, field3: c, field4: d, field5: e }) }) .then(res => res.json()) .then(res => console.log('操作成功', res)) }兼容ES Module导入场景
如果是纯Node脚本运行,且package.json中配置了"type": "module",将导入写法调整为:import mysql from 'mysql';
内容的提问来源于stack exchange,提问作者Женя
相关产品推荐
相关产品推荐

