在控制器方法中创建两个相互引用的对象

时间:2018-02-24 13:33:21

标签: node.js express mongoose mongoose-schema

我有一个允许用户创建帐户的应用。这一切都运行正常,但我现在想创建一个系统,将用户添加到组并将角色作用于这些组。在SO上阅读一些相关的问题我创建了一个新的Group模式,并在它和我的User模式之间创建了引用:

我的用户架构如下:

const UserSchema = new mongoose.Schema({
  email: {
    type: String,
    unique: true,
    lowercase: true,
    trim: true,
    validate: [validator.isEmail, 'Invalid Email Address'],
    required: 'Please supply an email address'
  },
  name: {
    type: String,
    required: 'Please supply a name',
    unique: true,
    trim: true
  },
  group: {
    type: mongoose.Schema.ObjectId,
    ref: 'Group',
    required: 'You must supply a Group'
  }
)}

我的Group架构如下:

const GroupSchema = new mongoose.Schema({
  name  : String,
  members: [{
    role: { 
      type: String
    },
    user: { 
      type: mongoose.Schema.Types.ObjectId, 
      ref: 'User'
    }
  }],
});

我有一些中间件可以注册和验证用户,但实际上注册表单中的值当前用于创建新用户:

const user = new User({ email: req.body.email, name: req.body.name });

我希望所有用户都成为群组的一部分(即使只是一个群组)并且该群组中的第一个人将成为管理员(他们以后可以将其他人添加到他们的群组中,管理用户角色等)。

我认为当我创建用户时,我会同时创建他们所属的群组并将其添加到其中,但我不知道最好的方法是什么这样做。我是否应该首先创建一个组的中间件,然后创建用户传递先前创建的组的group_id?

似乎有更好的方法可以做到这一点,但我不知道我不知道它是什么。任何帮助非常感谢。

0 个答案:

没有答案