我想将一个对象从一个模式保存到另一个模式中的数组。我所拥有的是用户架构和事件架构。例如,用户模式具有属性“已连接”,即属性。在发出请求时,应将会议推送到“已加入”数组。
目前我在客户端上有这个代码:
<div ng-repeat="event in events">
...
<button ng-click="joinEvent(event)">Join</button>
</div>
$scope.joinEvent = function(event){
$http.put('/join', event)
.success(function (data) {
$scope.users = data;
})
.error(function (data) {
console.log('Error: ' + data);
})
};
这是在express.js路线中的:
app.put('/join', function (req, res){
var user = req.user; // logged in user
var id = req.user._id;
var update = { $addToSet: {joined: req.event} };
User.findByIdAndUpdate(id, update, {upsert: true}, function (err, user) {
if (!err) {
console.log("joined");
//return all users from db
User.find(function(err, users) {
if (err)
res.send(err)
res.json(users);
});
} else {
if(err.name == 'ValidationError') {
res.statusCode = 400;
res.send({ error: 'Validation error' });
} else {
res.statusCode = 500;
res.send({ error: 'Server error' });
}
console.log('Internal error(%d): %s',res.statusCode,err.message);
}
});
});
毕竟,我在user.joined中看到'null'。我的方法出了什么问题?
答案 0 :(得分:0)
您尝试获取事件名称的方式是错误的。
在您的代码中req.event == null
。这就是你在'user.joined'中看到null的原因。
在客户端 - 事件属性应如下所示:
event = {eventName: "someEventName"}
在服务器中 - 您可以访问以下事件名称:
var update = { $addToSet: {joined: req.body.eventName} };
答案 1 :(得分:0)
感谢Yarden推动我走向正确的方向。我通过在客户端传递事件ID并在查找用户之前进行Event.findById查询以其他方式实现。这很有用。