Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose:如何保存两个相关模式的数据?_Node.js_Mongoose - Fatal编程技术网

Node.js Mongoose:如何保存两个相关模式的数据?

Node.js Mongoose:如何保存两个相关模式的数据?,node.js,mongoose,Node.js,Mongoose,对于accountSchema、userSchema和sellerSchema,我有不同的模式。不同之处在于accountSchema这里的数据是唯一的值,如用户名、密码等。但是我遇到了如何将accountSchema中的数据存储到userSchema的问题。我可以使用new保存,但id值不同 账户模式 const accountSchema = mongoose.Schema({ email: { type: String, required: [true, 'Please

对于accountSchema、userSchema和sellerSchema,我有不同的模式。不同之处在于accountSchema这里的数据是唯一的值,如用户名、密码等。但是我遇到了如何将accountSchema中的数据存储到userSchema的问题。我可以使用new保存,但id值不同

账户模式

const accountSchema = mongoose.Schema({
 email: {
    type: String,
    required: [true, 'Please provide an email'],
    unique: true,
  },
  username: {
    type: String,
    required: [true, 'Please provide a username'],
    minlength: [4, 'Username must be at least 4 characters'],
    maxlength: [16, 'Username must be at most 16 characters'],
    unique: true,
  },
  password: {
    type: String,
    minlength: [6, 'Password must be at least 6 characters'],
    maxlength: [22, 'Password must be at most 22 characters'],
    required: [true, 'Please provide a password'],
  },
  role: {
    type: String,
    enum: ['user', 'admin', 'seller'],
    required: true,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
  updatedAt: {
    type: Date,
  },
const userSchema = mongoose.Schema({
  fullname: {
    type: String,
    required: true,
  },
  mobileno: {
    type: Number,
    required: true,
  },
  isFacebookId: {
    type: String,
  },
  isGoogleId: {
    type: String,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
  updatedAt: {
    type: Date,
  },
});
userSchema

const accountSchema = mongoose.Schema({
 email: {
    type: String,
    required: [true, 'Please provide an email'],
    unique: true,
  },
  username: {
    type: String,
    required: [true, 'Please provide a username'],
    minlength: [4, 'Username must be at least 4 characters'],
    maxlength: [16, 'Username must be at most 16 characters'],
    unique: true,
  },
  password: {
    type: String,
    minlength: [6, 'Password must be at least 6 characters'],
    maxlength: [22, 'Password must be at most 22 characters'],
    required: [true, 'Please provide a password'],
  },
  role: {
    type: String,
    enum: ['user', 'admin', 'seller'],
    required: true,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
  updatedAt: {
    type: Date,
  },
const userSchema = mongoose.Schema({
  fullname: {
    type: String,
    required: true,
  },
  mobileno: {
    type: Number,
    required: true,
  },
  isFacebookId: {
    type: String,
  },
  isGoogleId: {
    type: String,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
  updatedAt: {
    type: Date,
  },
});
控制器

export const registerUser = async (req, res) => {
  const {
    role,
    email,
    username,
    password,
    confirmPassword,
    fullname,
    mobileno,
    isGoogleId,
    isFacebookId,
  } = req.body;

  try {
    if (role !== 'user') {
      return res.status(400).json({
        msg: 'You should have roll of user',
        roleError: true,
      });
    }

    if (!isEmailValid(email)) {
      return res.status(400).json({
        msg: 'You must provide a valid email address',
        emailError: true,
      });
    }

    const chkEmail = await accountModel.findOne({ email });

    if (chkEmail) {
      return res.status(400).json({
        msg: 'Email address already exists',
        emailError: true,
      });
    }

    const chkUsername = await accountModel.findOne({ username });

    if (chkUsername) {
      return res.status(400).json({
        msg: 'Username already exists',
        usernameError: true,
      });
    }

    if (!isPasswordValid(password)) {
      return res.status(400).json({
        msg: 'At least 6 characters',
        passwordError: true,
      });
    }

    const newAccount = new accountModel({
      role,
      email,
      username,
      password,
    });

    const newUser = new userModel({
      fullname,
      mobileno,
      isGoogleId,
      isFacebookId,
    });

    await newAccount.save({
      validateBeforeSave: false,
    });
    await newUser.save({
      validateBeforeSave: false,
    });

    const activationToken = createActivationToken({
      email,
      username,
      password,
      fullname,
    });

    sendEmailConfirmation({
      userReceiver: newAccount,
      activationToken,
    });
  } catch (error) {
    console.log(error);
  }
})