将模型对象传递给mongoose请求

时间:2015-04-08 23:56:46

标签: node.js mongodb express

我想将一个对象从一个模式保存到另一个模式中的数组。我所拥有的是用户架构和事件架构。例如,用户模式具有属性“已连接”,即属性。在发出请求时,应将会议推送到“已加入”数组。

目前我在客户端上有这个代码:

<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'。我的方法出了什么问题?

2 个答案:

答案 0 :(得分:0)

您尝试获取事件名称的方式是错误的。 在您的代码中req.event == null。这就是你在'user.joined'中看到null的原因。

在客户端 - 事件属性应如下所示: event = {eventName: "someEventName"}

在服务器中 - 您可以访问以下事件名称:

var update = { $addToSet: {joined: req.body.eventName} };

答案 1 :(得分:0)

感谢Yarden推动我走向正确的方向。我通过在客户端传递事件ID并在查找用户之前进行Event.findById查询以其他方式实现。这很有用。