const mongoose = require('mongoose'); const logger = require('../utils/logger'); const connectDB = async () => { try { const conn = await mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true, }); logger.info(`MongoDB Connected: ${conn.connection.host}`); // 创建默认管理员用户和默认分类 await createDefaultAdmin(); await createDefaultCategories(); } catch (error) { logger.error(`Error connecting to MongoDB: ${error.message}`); process.exit(1); } }; const createDefaultAdmin = async () => { try { const User = require('../models/User'); // 先检查环境变量 if (!process.env.ADMIN_USERNAME || !process.env.ADMIN_PASSWORD) { logger.warn('管理员账户环境变量未设置,跳过默认管理员创建'); return; } // 检查是否已存在管理员用户 const adminExists = await User.findOne({ username: process.env.ADMIN_USERNAME }); if (!adminExists) { // 不手动哈希密码,让模型的中间件处理加密 const admin = await User.create({ username: process.env.ADMIN_USERNAME, password: process.env.ADMIN_PASSWORD, // 直接使用原始密码 isAdmin: true }); logger.info(`默认管理员创建成功: ${admin._id}`); } else { logger.info('管理员账户已存在,无需创建'); } } catch (error) { logger.error(`创建默认管理员出错: ${error.message}`); } }; const createDefaultCategories = async () => { try { const Category = require('../models/Category'); // 检查是否已有分类 const categoriesCount = await Category.countDocuments(); if (categoriesCount === 0) { // 创建默认分类 const defaultCategories = [ { name: '通用', color: '#007AFF' }, { name: '工作', color: '#FF9500' }, { name: '学习', color: '#4CD964' }, { name: '创意', color: '#FF2D55' } ]; await Category.insertMany(defaultCategories); logger.info('Default categories created'); } } catch (error) { logger.error(`Error creating default categories: ${error.message}`); } }; module.exports = { connectDB };