2016-05-19 4 views
1

私はメソッドを取得する呼び出すときに、成功コールバックプレーン応答データを持っている、ngResourceの行動によって、非常に困惑している:ここで

svc.userApi().get({id:0})   
      .$promise.then(              
       function(response) {            
        console.log(response);        
       });              

responseは、バックエンドで返されるどんなデータです。私は方法投稿/保存使用している場合しかし、:コールバックで

svc.authenticateApi().save({ 
       username: username, 
       password: password 
      }) 
      .$promise.then(
       function(val) { 
        console.log("user token:", val); 
       }); 

valを代わりに、それはなど、$promise$resolvedのような特性を持つリソースオブジェクト、だ、ポストアクションの後にバックエンドで返されたデータではありません。 enter image description here 適切なデータを取得するには、authenticateApiを定義するときにtransformResponseオプションを定義する必要があります。 (詳細はquestionを参照してください)。なぜngResourceはこのように設計されていますか?このため$httpを使用した場合、比較のために、それは非常に簡単です

svc.login = function(username, password) { 
      return $http.post(apiEndpoint + 'authenticate', { 
       username: username, 
       password: password 
      }) 
      .then(function(val) { 
       console.log("user token:", val.data); 
      }); 
     }; 

成功コールバックでval.dataは再びプレーン応答データである:

enter image description here

私は保存/使用してきました間違った方法で投稿しますか?私のユースケースでは、認証が成功した後で認証トークンを返す方法はありますか?

答えて

0

文字列ではなく、何らかの理由でsaveが配列を要求しているように見えます。

私は私は私にはない、あなた私が添付された画像が混乱だと思うサービスでのリソースの方法

function getAllUsers(params) { 
     if (!params) { 
      params = {}; 
     } 
     return UserResource.get(params).$promise; 
    } 
+0

は申し訳ありませんが返すリソース

var UserResource = $resource('/users/:id', {id: '@id'}, { 'get': { cache: cache, isArray: true }, 'saveUserDefinition': { method: 'POST', interceptor: interceptor, isArray: false }, 'updateUserDefinition': { method: 'PUT', isArray: false } }); 

ための独自のメソッドを書くことをお勧めします応答は配列だと思うのですが、実際にはオブジェクトです(私はそれが$約束などを持っているので、リソースオブジェクトだと思います)、私はイメージを更新しました。 – swang

+0

$リソースメソッドは返されたオブジェクトを特別なプロパティを持つリソースタイプとしてラップしようとするので、追加フィールド($ promiseなど)が必要になるので、 'var user = User.get({userId:123 '$ save() 'にapposedされた' save() 'を使用していることにお気づきになりました。 authenticateApiはどのように見えますか? – d3l33t

+0

Ah ..あなたは正しい方向を指していますが、私はデフォルトのsaveの代わりにカスタマイズされた 'post'メソッドを使っていますが、私の投稿の定義は次のようにシンプルです:$ resource(apiEndpoint + 'authenticate'、null、 '投稿':{ メソッド: 'POST'}});私はそれを動作させるために 'post'に特別なtransformResponse関数を定義する必要があります。この 'post'関数を定義せずに直接saveを使うと、デフォルトのsaveがtransformResponseを定義していると思いますか?この場合、私はリソースオブジェクトをまだ持っていないので、私は$ saveを使用できません。私はgetメソッドを呼び出さない。 – swang

関連する問題