我对ngResource的行为非常困惑,在调用 get 方法时,成功回调具有简单的响应数据:
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
等属性:{{3} }
为了获得正确的数据,我必须在定义transformResponse
时定义authenticateApi
选项。 (有关详细信息,请参阅此)。为什么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
也是一个简单的响应数据:
我一直在使用保存/发布错误的方式吗?在我的用例中,如何在成功通过身份验证后获得身份验证令牌?
答案 0 :(得分: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
}
});
我在服务中返回资源的方法
function getAllUsers(params) {
if (!params) {
params = {};
}
return UserResource.get(params).$promise;
}