我正在构建一个RESTFul应用程序并使用Angular作为我的视图。我想使用资源,因为它是最好的方法,我按照操作方法进行了一些调整,我自己做了一些调整,包括头文件api令牌,代码端如下:
fcbMixApp.factory('Resources', ['$resource',
function ($resource) {
return {
seminary: function (apiToken) {
return $resource('api/seminaries/:seminary', {}, {
save: {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + apiToken
}
},
update: {
method: 'PUT',
headers: {
'Authorization': 'Bearer ' + apiToken
}
}
});
},
attendant: function (apiToken) {
return $resource('api/attendants/:attendant', {}, {
save: {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + apiToken
}
},
update: {
method: 'PUT',
headers: {
'Authorization': 'Bearer ' + apiToken
}
}
});
}
}
}]);
但是当我在我的控制器上这样叫它时:
var Seminary = Resources.seminary(User.getAuthData().access_token);
我不希望该行向我的api发出任何请求,但确实如此。我的代码如下:
Seminary.query(function (data) {
$scope.seminaries = data;
});
所以我最后打了两个电话。
我做错了什么,或者我应该改变什么。
提前致谢。
答案 0 :(得分:1)
您应该使用令牌设置标头:
$http.defaults.headers.common["Authorization"] = 'Bearer' + apiToken;
而不是资源本身。您应该在用户第一次登录时设置此项,然后您将在所有请求中发送它。
还要考虑您的资源看起来像这样,并为服务员单独制作一个:
fcbMixApp.factory('Resources', ['$resource', function ($resource) {
function setRequestData(data) {
var requestData = new Object();
requestData.seminary = data;
return angular.toJson(requestData);
}
return $resource('api/seminaries/:seminary', {}, {
save: {
method: 'POST',
headers: {"Content-Type": "application/json"},
transformRequest: setRequestData
},
update: {
method: 'PUT',
headers: {"Content-Type": "application/json"},
transformRequest: setRequestData
}
});
}]);
答案 1 :(得分:0)
以下是添加资源授权标头的解决方案。