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

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服务端:

    1. 服务端初始化MySQL连接(推荐用连接池,稳定性比单连接更高):
    // 以下代码写在Node服务端文件中
    const mysql = require('mysql');
    const connPool = mysql.createPool({
      host: 'localhost', 
      user: 'user_name', 
      password: 'password', 
      database: 'database_name',
      connectionLimit: 10
    });
    
    1. 服务端编写接口接收前端请求,执行数据库插入操作,使用参数化查询避免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' });
      })
    })
    
    1. 前端点击事件中只需要发送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,提问作者Женя

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:57:17