AngularJS资源调用多次

时间:2015-09-25 19:41:42

标签: angularjs api rest

我正在构建一个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;
            });

所以我最后打了两个电话。

我做错了什么,或者我应该改变什么。

提前致谢。

2 个答案:

答案 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)

以下是添加资源授权标头的解决方案。

AngularJS: How to send auth token with $resource requests?