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

Node.js+Express+MySQL项目报错:ReferenceError: require未定义

解决Node.js + Express + MySQL中的ReferenceError: Can't find variable: require错误

这个错误本质上是你的代码在不支持CommonJS模块系统的环境中运行导致的——要么是跨文件的模块导入导出逻辑没做好,要么是项目环境切换为ES模块(ESM),甚至可能是误把后端代码放到浏览器环境里执行了。结合你提到的「安装Express后出现问题、SQL类和main函数分属不同文件」这两个关键点,给你几个针对性的解决方案:


1. 修复跨文件的模块导出与导入逻辑

Node.js中不同文件的代码无法直接共享,必须通过模块系统完成导出/导入。你的SQL类在server.js,main.js要使用它,必须先导出再导入:

修改server.js(导出SQL类)

// server.js
// 建议把require移到文件顶部,符合CommonJS规范
const mysql = require('mysql');

class SQL {
    constructor() {
        this.connection = mysql.createConnection({
            host: 'localhost',
            user: 'root',
            password: '',
            database: 'newDB'
        });
    }

    connect() {
        this.connection.connect(function(err) {
            if (err) {
                console.error('error connecting: ' + err.stack);
                return;
            }
            console.log('Connected');
        });
    }

    disconnect() {
        this.connection.end(function(err) {
            if (err) {
                console.error('error ending connection: ' + err.stack);
                return;
            }
            console.log('Connection ended');
        });
    }
}

// 导出SQL类,让其他文件可以导入
module.exports = SQL;

修改main.js(导入SQL类)

// main.js
// 导入server.js中的SQL类,注意路径要正确
const SQL = require('./server.js');

function main() {
    const database = new SQL();
    database.connect(); // 别忘了调用连接方法,否则不会建立数据库连接
}

main();

2. 检查项目是否启用了ES模块(ESM)

如果你的项目根目录的package.json里有"type": "module"配置,Node.js会默认使用ESM规范,这时require就会失效,需要换成import/export语法:

调整server.js为ESM格式

// server.js
// 注意:mysql包对ESM支持有限,推荐改用mysql2
import mysql from 'mysql2';

class SQL {
    constructor() {
        this.connection = mysql.createConnection({
            host: 'localhost',
            user: 'root',
            password: '',
            database: 'newDB'
        });
    }

    // 其他方法不变...
}

export default SQL;

调整main.js为ESM格式

// main.js
import SQL from './server.js';

function main() {
    const database = new SQL();
    database.connect();
}

main();

提示:如果坚持用mysql包,可能需要添加--experimental-specifier-resolution=node参数启动Node.js,比如node --experimental-specifier-resolution=node main.js,但更稳妥的是直接安装mysql2:npm install mysql2


3. 确保代码在Node.js环境运行,而非浏览器

安装Express后,很多人会不小心把后端代码(比如main.js)通过<script>标签引入到前端HTML中——浏览器是不认识require的!你必须通过Node.js命令来执行后端代码:

node main.js

如果是Express服务器,应该启动你的Express入口文件(比如app.js),让它来调用数据库逻辑,而不是直接在浏览器里加载后端脚本。


4. 梳理Express项目结构

如果你的项目是Express + 前端静态资源的混合结构,建议把后端代码(server.js、main.js)放在单独的目录(比如backend/),前端静态资源放在public/目录。启动Express时,通过后端入口文件(比如app.js)来引入数据库逻辑,避免前后端代码混淆导致环境错误。


内容的提问来源于stack exchange,提问作者Oscar Ordoñez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:43:59