Node.js Mongoose:如何保存两个相关模式的数据?
对于accountSchema、userSchema和sellerSchema,我有不同的模式。不同之处在于accountSchema这里的数据是唯一的值,如用户名、密码等。但是我遇到了如何将accountSchema中的数据存储到userSchema的问题。我可以使用new保存,但id值不同 账户模式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
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);
}
})