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

React使用mysql包连数据库报错:Uncaught ReferenceError: process is not defined

问题分析与解决方法

根本原因

你在React前端代码中直接使用mysql包连接数据库是错误且不安全的:

  • mysql是Node.js后端专用库,依赖Node.js的process等全局变量,浏览器环境不存在这些变量,因此抛出process is not defined错误。
  • 前端代码会被打包后暴露给用户,数据库账号密码等敏感信息会直接泄露,严重威胁数据库安全。

正确解决方案:前后端分离架构

1. 后端创建API接口(Node.js + Express示例)

新建后端项目或在现有后端中添加接口,统一处理数据库查询逻辑:

// server.js
const express = require('express');
const mysql = require('mysql');
const cors = require('cors'); // 解决跨域请求问题
const app = express();

// 数据库连接配置(仅后端使用,不会暴露给前端)
const con = mysql.createConnection({
  host: "你的数据库地址",
  user: "你的数据库用户名",
  password: "你的数据库密码",
  port: '3306',
  database: "hs_db"
});

con.connect(err => {
  if (err) throw err;
  console.log("数据库连接成功");
});

app.use(cors());
app.use(express.json());

// 搜索接口:接收关键词,返回匹配的产品数据
app.get('/api/search', (req, res) => {
  const keyword = req.query.keyword;
  // 使用参数化查询防止SQL注入
  const sql = "SELECT * FROM products WHERE name LIKE ? OR description LIKE ?";
  const values = [`%${keyword}%`, `%${keyword}%`];
  
  con.query(sql, values, (err, results) => {
    if (err) return res.status(500).json({ error: err.message });
    res.json(results);
  });
});

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

安装依赖:npm install express mysql cors,启动后端:node server.js

2. 前端修改代码调用API

在Search.jsx中移除所有mysql相关代码,改用fetch或axios调用后端接口:

// Search.jsx
import { useState } from 'react';

function Search() {
  const [keyword, setKeyword] = useState('');
  const [products, setProducts] = useState([]);

  const handleSearch = async () => {
    if (!keyword.trim()) return;
    try {
      const response = await fetch(`http://localhost:3001/api/search?keyword=${encodeURIComponent(keyword)}`);
      const data = await response.json();
      setProducts(data);
    } catch (error) {
      console.error("搜索失败:", error);
    }
  };

  return (
    <div>
      <input
        type="text"
        value={keyword}
        onChange={(e) => setKeyword(e.target.value)}
        placeholder="输入关键词搜索"
      />
      <button onClick={handleSearch}>搜索</button>
      <ul>
        {products.map(product => (
          <li key={product.id}>{product.name}</li>
        ))}
      </ul>
    </div>
  );
}

export default Search;

为什么不推荐前端直接连数据库?

  • 安全风险:数据库账号密码会被用户直接获取,攻击者可随意操作数据库。
  • 环境不兼容:Node.js专属库依赖的全局变量在浏览器中不存在,会引发各类运行错误。
  • 维护成本高:无法统一处理权限控制、缓存、SQL注入防护等核心逻辑,后续迭代难度大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:45:31