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

Chrome运行代码报Net.createConnection is not a function错误如何解决

问题根因

Net.createConnection is not a function错误本质是架构选型错误,和browserify打包配置无关:

  1. npm上的mysql包是Node.js环境专属驱动,依赖Node.js内置的net(TCP网络)、crypto等核心模块,这些模块是Node运行时自带的底层能力,浏览器安全沙箱根本没有对应实现。browserify只能转译CommonJS模块语法,不可能给浏览器补全TCP直连的系统级能力。
  2. 浏览器本身就禁止前端JS直接发起TCP连接访问任意数据库服务,就算你能polyfill相关API,把数据库账号密码、连接地址直接写在前端代码里,等于把数据库完全暴露给所有访问用户,任何人打开浏览器控制台就能拿到凭据删改数据,属于严重安全隐患,这种实现思路本身就不成立。
解决方案
  • 立刻放弃浏览器直连MySQL的实现思路,调整为前后端分层架构:
    • 数据库操作逻辑全部放在Node.js服务端实现:在服务端代码中引入mysql包,完成连接创建、SQL执行等操作,数据库账号密码、连接配置只存在服务端,完全不对外暴露
    • 浏览器端只负责通过HTTP/WebSocket等协议请求Node服务端暴露的接口,由服务端完成数据库交互后把结果返回给前端
  • 如果是本地测试场景不需要连接真实MySQL服务,可以换浏览器兼容的前端数据库类库,比如编译为WebAssembly的sql.js,在浏览器内存中运行SQLite实例,不需要发起网络连接。
代码修正示例

你原来写的直连数据库代码属于服务端逻辑,不能打包到浏览器运行,分层后的参考代码如下:

服务端代码(Node环境直接运行,不要用browserify打包)

const express = require('express');
const mysql = require('mysql');
const app = express();

// 数据库配置仅保存在服务端
const dbConnection = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "你的业务数据库名"
});

dbConnection.connect((err) => {
  if (err) {
    console.error("数据库连接失败", err);
    return;
  }
  console.log("数据库连接成功");
});

// 给前端提供查询接口
app.get('/api/user/list', (req, res) => {
  dbConnection.query('SELECT * FROM user', (err, result) => {
    if (err) {
      res.status(500).send({ msg: "查询失败" });
      return;
    }
    res.send(result);
  });
});

app.listen(3000, () => {
  console.log("后端服务运行在 http://localhost:3000");
});

浏览器端代码(可使用browserify打包后运行)

// 前端只请求后端接口,不直接操作数据库
fetch('http://localhost:3000/api/user/list')
  .then(res => res.json())
  .then(userList => {
    console.log("获取到用户列表", userList);
  });

内容的提问来源于stack exchange,提问作者user19340185

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:51:09