PUT请求使用重复值覆盖数组值

时间:2015-10-18 13:45:10

标签: angularjs forms mongodb angular-fullstack

我正在使用Yeoman的angular-fullstack生成器制作一个小型的民意调查应用程序。我已经进入了实现用户选择以增加轮询计数的阶段,然后通过PUT请求更新我的MongoDB数据库。

问题已准备好供用户投票:

enter image description here

该对象具有单独的ID:

enter image description here

然后,用户就答案进行投票。在客户端看起来很好:

enter image description here

但它没有在服务器中正确更新。数组中的所有项目都更改为第一个项目,具有相同的ID:

enter image description here

当刷新客户端时,它会从服务器加载数据,显然这不是我想要的:

enter image description here

我做错了什么?

以下是观点:

<form ng-submit="submitForm()">

    <div ng-repeat="answer in poll.answers">
        <label><input type="radio" name="option" ng-model="radioData.index" value="{{$index}}"/>
            {{ answer.value }} - {{ answer.votes }} Votes
        </label>
    </div>
    <button class="btn btn-success" type="submit">Vote!</button>
</form>

这是控制器:

'use strict';

angular.module('angFullstackCssApp')
    .controller('ViewCtrl', function ($scope, $routeParams, $http) {
        $http.get('/api/polls/' + $routeParams._id).success(function (poll) {
            console.log(poll);
            $scope.poll = poll;
            $scope.radioData = {
                index: 0
            };

            $scope.submitForm = function () {
                console.log($scope.radioData.index);
                $scope.poll.answers[$scope.radioData.index].votes += 1;
                console.log('scope poll answers:- ', $scope.poll.answers);
                console.log('scope poll answers[index]:- ', $scope.poll.answers[$scope.radioData.index]);
                console.log('votes:- ', $scope.poll.answers[$scope.radioData.index].votes);
                // Change database entry here
                $http.put('/api/polls/' + $routeParams._id, {answers: $scope.poll.answers}).success(function () {
                    console.log('success');
                });
            };
        });
    });

以下是相关的服务器端代码,全部保留在我的路由和端点设置的默认设置中:

router.put('/:id', controller.update);

// Updates an existing poll in the DB.
exports.update = function(req, res) {
  if(req.body._id) { delete req.body._id; }
  Poll.findById(req.params.id, function (err, poll) {
    if (err) { return handleError(res, err); }
    if(!poll) { return res.status(404).send('Not Found'); }
    var updated = _.merge(poll, req.body);
    updated.save(function (err) {
      if (err) { return handleError(res, err); }
      return res.status(200).json(poll);
    });
  });
};

架构:

var PollSchema = new Schema({
    creator: String,
    title: String,
    answers: [{
        value: String,
        votes: Number
    }]
}, { versionKey: false });

0 个答案:

没有答案