私はがメソッドを取得する呼び出すときに、成功コールバックプレーン応答データを持っている、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
のような特性を持つリソースオブジェクト、だ、ポストアクションの後にバックエンドで返されたデータではありません。 適切なデータを取得するには、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
は再びプレーン応答データである:
私は保存/使用してきました間違った方法で投稿しますか?私のユースケースでは、認証が成功した後で認証トークンを返す方法はありますか?
は申し訳ありませんが返すリソース
ための独自のメソッドを書くことをお勧めします応答は配列だと思うのですが、実際にはオブジェクトです(私はそれが$約束などを持っているので、リソースオブジェクトだと思います)、私はイメージを更新しました。 – swang
$リソースメソッドは返されたオブジェクトを特別なプロパティを持つリソースタイプとしてラップしようとするので、追加フィールド($ promiseなど)が必要になるので、 'var user = User.get({userId:123 '$ save() 'にapposedされた' save() 'を使用していることにお気づきになりました。 authenticateApiはどのように見えますか? – d3l33t
Ah ..あなたは正しい方向を指していますが、私はデフォルトのsaveの代わりにカスタマイズされた 'post'メソッドを使っていますが、私の投稿の定義は次のようにシンプルです:$ resource(apiEndpoint + 'authenticate'、null、 '投稿':{ メソッド: 'POST'}});私はそれを動作させるために 'post'に特別なtransformResponse関数を定義する必要があります。この 'post'関数を定義せずに直接saveを使うと、デフォルトのsaveがtransformResponseを定義していると思いますか?この場合、私はリソースオブジェクトをまだ持っていないので、私は$ saveを使用できません。私はgetメソッドを呼び出さない。 – swang