2015-04-08 2 views
0

Я хотел бы сохранить объект из одной схемы в массив в другой. У меня есть схема пользователя и схема событий. В пользовательской схеме есть, например, свойство «join», которое является массивом. При подаче запроса на запрос собрание должно быть перенесено в «объединенный» массив.Пропустить объект модели для запроса мангуста

На данный момент у меня есть этот код на стороне клиента:

<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. Что случилось с моим подходом?

ответ

0

То, как вы пытаетесь получить имя события, неверно. В вашем коде req.event == null. Вот почему вы видите null в 'user.joined'.

В клиенте - свойство события должен выглядеть следующим образом: event = {eventName: "someEventName"}

На сервере - вы достигнете названия события, как это:

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

Благодаря Иордана для толкания меня в правильном направлении , Я сделал это по-другому, передав идентификатор события на clientide и сделав запрос Event.findById перед поиском пользователя. Это сработало.

Смежные вопросы