Angularjs 使用PUT更新投票计数

Angularjs 使用PUT更新投票计数,angularjs,mongodb,http,mean-stack,angular-fullstack,Angularjs,Mongodb,Http,Mean Stack,Angular Fullstack,我正在使用Yeoman的angular fullstack generator制作一个简单的完整堆栈javascript轮询应用程序。我已经到了需要记录用户输入以注册对个人投票答案的投票的地步 目前,我的代码会正确地影响客户端代码,但不会更新数据库 以下是模式: var PollSchema = new Schema({ creator: String, title: String, answers: [{ value: String, v

我正在使用Yeoman的angular fullstack generator制作一个简单的完整堆栈javascript轮询应用程序。我已经到了需要记录用户输入以注册对个人投票答案的投票的地步

目前,我的代码会正确地影响客户端代码,但不会更新数据库

以下是模式:

var PollSchema = new Schema({
    creator: String,
    title: String,
    answers: [{
        value: String,
        votes: Number
    }]
});
这是控制器:

'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;
                // Change database entry here
                $http.put('/api/polls/' + $routeParams._id, {answers: $scope.poll.answers});
            };
        });
    });
以下是观点:

<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>
…但我的数据库没有任何变化。我没有控制台错误

这是我的路线:

router.put('/:id', controller.update);
以及
更新
功能(默认设置的一部分):

编辑:我意识到提交投票时会发生什么。当用户单击“投票”时,将向服务器发送PUT请求,并更新值:

但是,当页面刷新时,它会显示实际发生的情况;数据库中的所有值都已更改为第一个答案值:

仍然没有控制台错误。 如果选择并投票的值不是第一个值,则所有值都会更改为第一个,但不会注册投票

  • 如何编写成功更新数据库的PUT请求

$scope.answers
在任何地方都没有定义。看起来您有几个问题,因为它返回了一个200,用于发送未定义的数据。在
$http
callback@charlietfl我不应该发布这个…虽然它与
$scope.poll.answers的结果相同,但您的模式是用于poll的。显示放置路线code@charlietfl根据更新了我的问题检查响应对象…正在合并的结构不相同。也不返回已更新的

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);
    });
  });
};