0

Yeoman の angular-fullstack ジェネレーターを使用して、シンプルなフルスタック 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>

私の端末では、渡した ID に基づいて put リクエストが成功しています...

PUT /api/polls/56229ba4e10ae6ad29b7a493 200 3ms - 225b

...しかし、私のデータベースでは何も変わりません。コンソール エラーは発生しません。

これが私のルートです:

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

およびupdate関数 (yeoman のデフォルトの一部):

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

編集:投票が送信されたときに何が起こっているのかを理解しました。ユーザーが投票をクリックすると、PUT リクエストがサーバーに送信され、値が更新されます。

ここに画像の説明を入力

ただし、ページを更新すると、実際に何が起こったかが表示されます。データベース内のすべての値が最初の回答値に変更されました。

ここに画像の説明を入力

まだコンソールエラーはありません。最初の値ではない値を選択して投票すると、すべての値が最初の値に変更されますが、投票は登録されません。

  • データベースを正常に更新する PUT リクエストを作成するにはどうすればよいですか?
4

0 に答える 0