我试图为每个用户创建一个项目列表,这意味着用户可以创建项目,而我希望为每个用户保留这些数据。我在下面创建了两个不同的模式:
user.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
userSchema = new Schema({
unique_id: Number,
email: String,
username: String,
password: String,
passwordConf: String,
teamname: String,
items: [{ type: Schema.Types.ObjectId, ref: 'Item' }],
});
(ItemSchema = new Schema({
createrId: { type: Schema.Types.ObjectId, ref: 'User' },
productname: String,
description: String,
price: String,
totalStock: String,
})),
(Item = mongoose.model('Item', ItemSchema));
User = mongoose.model('User', userSchema);
module.exports = { Item, User };
在创建了2个模式后,他在index.js中使用它们,将所有内容路由在一起。
index.js
router.get('/create_item', function (req, res, next) {
return res.render('items.ejs');
});
router.post(
'/create_item',
function (
req,
res,
next // Try to create items in database
) {
console.log(req.body);
var itemInfo = req.body;
if (
!itemInfo.itemname ||
!itemInfo.itemdsc ||
!itemInfo.itemstock ||
!itemInfo.itemprice
) {
res.send();
} else {
var NewItem = new Item({
createrId: loggedInUser._id,
productname: itemInfo.itemname,
description: itemInfo.itemdsc,
price: itemInfo.itemprice,
totalStock: itemInfo.itemstock,
});
NewItem.save(function (err, Item) {
if (err) console.log(err);
else console.log('Item added succesfully !');
});
}
User.findById(loggedInUser._id)
.populate('items')
.exec(function (err, result) {
if (err) {
console.log(err);
} else {
console.log('Suceess ? : ', result.items);
console.log(loggedInUser._id);
}
});
}
);
我将loggedInUser的数据保存在**'/login'**中,以便它返回一个值。
"Suceess ? :[]
6379921faf39150008fa1b88
Item added succesfully !
哪个认为问题是从输出它试图填充项目后,项目被创建,但如何才能解决这个问题?谢谢
1条答案
按热度按时间j2qf4p5b1#
问题是您的代码没有按顺序执行(
NewItem.save
在User.findById
之后记录)。尝试使用
async await
,同时您需要将新创建的项_id
添加到相应的User
,以将新引用添加到items
数组: