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系统返回
- 这种方式无需手动注释代码,项目可以在Windows和macOS环境下自动适配运行
内容的提问来源于stack exchange,提问作者brendan_aper
相关产品推荐
相关产品推荐

