技术栈:
- nuxt4 + qorder
数据库初始化脚本
/**
* 初始化默认用户脚本
* 使用方法: npx tsx scripts/init-user.ts
*/
import mongoose from "mongoose";
import bcrypt from "bcryptjs";
import dotenv from "dotenv";
// 加载环境变量
dotenv.config();
// 用户 Schema 定义
const UserSchema = new mongoose.Schema({
nickname: { type: String, required: true },
cover: { type: String, required: true },
mobile: { type: String, required: true },
pwd: { type: String, required: true }
}, {
versionKey: false,
timestamps: true
});
const User = mongoose.models.User || mongoose.model("User", UserSchema);
// 默认用户配置
const DEFAULT_USER = {
nickname: "刘宁",
cover: "https://via.placeholder.com/150",
mobile: "13800138000",
password: "123456" // 明文密码,脚本会自动加密
};
async function initDefaultUser() {
const uri = process.env.MONGODB_URI;
const dbName = process.env.MONGODB_DB || "nuxt_blog";
if (!uri) {
console.error("❌ 错误: 请在 .env 文件中设置 MONGODB_URI");
process.exit(1);
}
console.log("🔗 正在连接数据库...");
try {
await mongoose.connect(uri, { dbName });
console.log("✅ 数据库连接成功");
// 检查用户是否已存在
const existingUser = await User.findOne({ mobile: DEFAULT_USER.mobile });
if (existingUser) {
console.log(`⚠️ 用户 ${DEFAULT_USER.mobile} 已存在,跳过创建`);
console.log(` 昵称: ${existingUser.nickname}`);
} else {
// 加密密码
const hashedPassword = await bcrypt.hash(DEFAULT_USER.password, 10);
// 创建用户
const newUser = await User.create({
nickname: DEFAULT_USER.nickname,
cover: DEFAULT_USER.cover,
mobile: DEFAULT_USER.mobile,
pwd: hashedPassword
});
console.log("✅ 默认用户创建成功:");
console.log(` 昵称: ${newUser.nickname}`);
console.log(` 手机号: ${newUser.mobile}`);
console.log(` 密码: ${DEFAULT_USER.password}`);
}
} catch (error: any) {
console.error("❌ 初始化失败:", error.message);
process.exit(1);
} finally {
await mongoose.disconnect();
console.log("🔌 数据库连接已关闭");
}
}
// 运行初始化
initDefaultUser();