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

Node.js如何在配置文件中连接MySQL?报connectDb is not a function错误

报错核心原因

两个问题直接导致报错:

  • config/db.js中定义了connectDb函数,但没有通过module.exports导出,server.js里require拿到的模块导出值不是该函数,调用时直接触发TypeError
  • 你使用的原生mysql包是回调风格API,connection.connect()方法本身不返回Promise,外层套async/await没有实际作用,异步写法不匹配
正确实现方式

给两种可直接运行的写法:

写法1:保留原有mysql包适配

修改config/db.js,补全导出,把回调风格的连接方法包装成Promise适配异步调用:

const mysql = require('mysql')

const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'mydatabase'
})

const connectDb = () => {
  return new Promise((resolve, reject) => {
    connection.connect(function (err) {
      if (err) {
        console.error("数据库连接报错: ", err.message);
        return reject(err);
      }
      console.log("MySQL服务连接成功");
      resolve(connection);
    });
  });
};

// 必须导出函数,外部require才能拿到
module.exports = connectDb;

修改server.js,补全异步调用的异常捕获:

const connectDB = require("./config/db");

// 执行连接,捕获连接失败场景
connectDB().catch(err => {
  console.error("数据库初始化失败,进程退出", err);
  process.exit(1);
});

写法2:推荐使用mysql2包(原生支持Promise)

原生mysql包维护活跃度低,生产环境更推荐用API兼容、性能更好、原生支持async/await的mysql2包。
首先安装依赖:

npm install mysql2

修改config/db.js:

// 引入promise版本的mysql2
const mysql = require('mysql2/promise');

const connectDb = async () => {
  try {
    const connection = await mysql.createConnection({
      host: 'localhost',
      user: 'root',
      password: '',
      database: 'mydatabase'
    });
    console.log("MySQL服务连接成功");
    return connection;
  } catch (err) {
    console.error("数据库连接报错: ", err.message);
    throw err;
  }
};

module.exports = connectDb;

server.js的写法和上面写法1的server.js完全一致即可。

额外注意
  • 数据库账号、密码、地址这类配置不要硬编码在业务代码里,建议放到环境变量中统一管理,避免敏感信息泄露
  • 线上环境建议使用连接池代替单连接,能大幅提升高并发场景下的数据库访问性能
  • 数据库连接的异常必须显式捕获,避免连接失败时进程无提示退出,增加排查成本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:21:31