Node.js连接MongoDB启动时如何初始化创建默认用户?
Node.js + Mongoose 启动自动创建初始用户实现方案
先修正现有代码的问题
你当前的用户Schema存在语法错误,isAdministrator字段未声明类型,会导致后续写入数据失败,修正后的Schema代码如下:
const UserSchema = mongoose.Schema({ userID: { type: String, required: true }, userName: { type: String, required: true }, password: { type: String, required: true }, isAdministrator: { type: Boolean, // 补全类型声明 required: true } }); // 定义用户Model const User = mongoose.model('User', UserSchema);
补充数据库连接成功后的初始化逻辑
在数据库连接成功的open事件回调中,添加初始用户校验创建逻辑,优先查询是否已存在管理员用户,不存在时才执行创建,避免重复写入数据:
const dbURI = "mongodb://localhost:27017/test"; mongoose.connect(dbURI, { useNewUrlParser: true, useUnifiedTopology: true }) const db = mongoose.connection; db.on("error", (err)=>{console.error(err)}); db.once("open", async () => { console.log ("Database started successfully"); try { // 校验是否已存在管理员用户 const adminExists = await User.findOne({ isAdministrator: true }); if (!adminExists) { // 不存在则创建初始管理员 const initAdmin = new User({ userID: "admin001", // 可自定义初始用户ID userName: "系统管理员", // 可自定义初始用户名 password: "your_init_password", // 注意:实际使用请提前加密密码,不要明文存储 isAdministrator: true }); await initAdmin.save(); console.log("初始管理员用户创建成功"); } } catch (err) { console.error("初始用户创建失败:", err); } })
注意事项
- 密码禁止明文存储,实际使用请提前使用
bcrypt等加密工具对初始密码做哈希处理后再写入数据库 - 初始账号密码建议放在
.env环境变量中配置,不要硬编码在业务代码里 - 如果需要创建多个初始用户,可以把用户配置放在数组中批量判断创建
内容的提问来源于stack exchange,提问作者Deezer
相关产品推荐
相关产品推荐

