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

Windows下Node.js的MySQL跨平台配置:如何自动兼容macOS Socket设置?

Sequelize连接MySQL跨系统适配问题解决办法

问题场景

使用Node.js的Sequelize连接MySQL时出现错误:

connect ENOENT /tmp/mysql.sock

错误源于代码中固定配置了macOS专用的socketPath参数,Windows系统下不存在该套接字文件,导致连接失败。原代码如下:

const Sequelize = require("sequelize");
require("dotenv").config();

const sequelize = new Sequelize(
  process.env.DB_NAME,
  process.env.DB_USER,
  process.env.DB_PASSWORD,
  {
    host: "localhost",
    dialect: "mysql",
    port: 3306,
    dialectOptions: {
      socketPath: "/tmp/mysql.sock",
    },
  },
);

module.exports = sequelize;

解决方案

通过process.platform判断当前操作系统,动态生成Sequelize配置:Windows系统自动忽略socketPath,macOS系统保留该配置。修改后的代码如下:

const Sequelize = require("sequelize");
require("dotenv").config();

// 基础配置
const sequelizeConfig = {
  host: "localhost",
  dialect: "mysql",
  port: 3306,
};

// 根据系统添加dialectOptions
if (process.platform === "darwin") { // darwin是macOS的平台标识
  sequelizeConfig.dialectOptions = {
    socketPath: "/tmp/mysql.sock",
  };
}

const sequelize = new Sequelize(
  process.env.DB_NAME,
  process.env.DB_USER,
  process.env.DB_PASSWORD,
  sequelizeConfig
);

module.exports = sequelize;

说明

  • process.platform是Node.js内置的环境变量,返回当前操作系统的平台标识:
    • Windows系统返回win32
    • macOS系统返回darwin
  • 这种方式无需手动注释代码,项目可以在Windows和macOS环境下自动适配运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:34:51