fbab5486创建于 3 天前历史提交
const { Sequelize } = require('sequelize');
const path = require('path');

// 按环境加载 .env 文件
const envFile = process.env.NODE_ENV === 'production'
  ? '.env.production'
  : '.env';
require('dotenv').config({ path: path.join(__dirname, '../../', envFile) });

const dbType = (process.env.DB_TYPE || 'mysql').toLowerCase();
const isDev = process.env.NODE_ENV === 'development';

let sequelize;

if (dbType === 'sqlite') {
  // === SQLite 模式 ===
  const dbPath = process.env.DB_NAME || './data/juhe_admin.db';
  sequelize = new Sequelize({
    dialect: 'sqlite',
    storage: dbPath,
    logging: isDev ? console.log : false,
    define: {
      timestamps: true,
      underscored: true,
      freezeTableName: true,
      // SQLite 模式不创建物理外键(已有数据由 sql.js 管理,避免约束冲突)
      // Sequelize 仍在 JS 层做关联查询
    },
  });

  // 关闭 SQLite 外键约束(表结构由 sql.js DDL 管理,避免 sync 时冲突)
  sequelize.query("PRAGMA foreign_keys = OFF");
} else {
  // === MySQL 模式 ===
  const dbName = process.env.DB_NAME || 'juhe_admin';
  const dbUser = process.env.DB_USER || 'root';
  const dbPass = process.env.DB_PASSWORD || '';
  const dbHost = process.env.DB_HOST || 'localhost';
  const dbPort = parseInt(process.env.DB_PORT) || 3306;

  sequelize = new Sequelize(dbName, dbUser, dbPass, {
    host: dbHost,
    port: dbPort,
    dialect: 'mysql',
    logging: isDev ? console.log : false,
    timezone: '+08:00',
    define: {
      timestamps: true,
      underscored: true,
      freezeTableName: true,
    },
    pool: {
      max: 10,
      min: 0,
      acquire: 30000,
      idle: 10000,
    },
  });
}

module.exports = sequelize;