samlax12's picture
Upload 18 files
006ee19 verified
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 };