我有一个如下所示的用户架构:
const userSchema = new Schema({
email: {
type: String,
required: true,
unique: true,
trim: true
},
password: {
type: String,
required: true
},
role: {
type: String,
default: 'customer',
enum: ['customer', 'farmer', 'admin']
},
user_id: {
type: Schema.Types.ObjectId,
required: true,
unique: true
}
})
另外,我还有另一个架构,称为“客户”,看起来像这样:
const customerSchema = new Schema({
company: String,
contact: String,
...etc
})
现在,我要做的就是创建用户文档,创建并保存一个新的客户文档,然后将其_id保存到我的用户文档的user_id字段中。
发布请求看起来像这样:
// POST - USER REGISTRATION
router.post('/register', function (req, res) {
const { email, password, role } = req.body
const user = new User({ email, password, role,
user_id: new Customer({
company: req.body.company,
contact: req.body.contact,
...etc (rest of data)
})})
user.save(function(err) {
if (err) {
res.status(500)
.send("Failed to register. Please try again.")
}
else {
res.status(200).send("Registered.")
}
})
})
虽然这似乎创建了一个Customer对象(在user_id下有一个ObjectID),但没有将客户保存到数据库中(自然是因为没有调用.save)。我这里的原始方法是将user_id变量设置为null,然后让客户创建并保存自己,然后将user_id变量设置为customer._id值,但这不能作为user.save(func(err))起作用将具有“空” user_id值。
像这样尝试
router.post("/register", async function (req, res) {
try {
const { email, password, role } = req.body;
let customer = new Customer({
company: req.body.company,
contact: req.body.contact,
});
let resultCustomer = await customer.save();
const user = new User({
email,
password,
role,
user_id: resultCustomer._id,
});
await user.save();
res.status(200).send("Registered.");
} catch (error) {
res.status(500).send("Failed to register. Please try again.");
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句