0

$resourceを定義した方法は次のとおりです。

app.factory('User', function($resource){
    return $resource('/api/user', {}, {
        get: { method:'GET'},
        update: { method:'PUT'},
    })
})

そして、これが私のコントローラーです:

function SettingsCtrl($scope, $http, User) {
    $scope.user = User.get(
        {}, //Params

        function(data) { //Successfully received data

        },
        function(data) { //Failure to receive data

        }
    );

    $scope.saveUser = function() {
        $scope.user.$update();
        console.log($scope.user);
    };
}

コントローラの上部でのUser.get()呼び出しは、バックエンドからデータを正しく取得しています。私のHTMLでは、$scope.saveUser関数を呼び出すボタンを作成し、を使用していくつかの入力を作成しng-modelました。双方向のデータバインディングが正しく機能しているように見えます。この関数を呼び出すconsole.log($scope.user)$scope.saveUser、ブラウザーで行った変更を加えて、期待どおりにユーザーオブジェクトが返されます。ただし、ノードバックエンドでは、PUTリクエストで受信したオブジェクトをログに記録します。これは、ブラウザーで行った変更を反映しておらず、元のオブジェクトと同じように見えます。ブラウザのボタンをクリックすると、データが元の値にリセットされます。何が起こっている?ブラウザに入力した更新データが送信されないのはなぜですか?

4

1 に答える 1

2

あなたのコメントによると:

console.log($scope.user)これは、フォームを編集して [保存] をクリックした後のブラウザーからのものです (これは を呼び出します) saveUser

{__v:0, _id:"50b1a966c12ef0c426000007", password:"NEW MODIFIED PASSWORD"}

そして、ノードがログとして記録するものは次のconsole.log(req.user)とおりです。

{__v:0, _id:"50b1a966c12ef0c426000007", password:"originalPassword"})

req.user通常、現在ログインしているユーザーが誰であるかを指定するために request オブジェクトに添付されるオブジェクトであり、通常はミドルウェアによって管理されます。リクエストを行っているのでPUT、 でデータを探していますreq.body

于 2012-11-25T20:23:14.607 に答える