2013-06-26 39 views
11

Trong ví dụ mã sau:

myApp.config(['$httpProvider', function($httpProvider, $cookieStore) { 

    $httpProvider.defaults.withCredentials = true; 

    $httpProvider.defaults.headers.get['Authorization'] = 'Basic '+ $cookieStore.get('myToken'); 

    return JSON.stringify(data); 

}]); 

tôi nhận được một lỗi angularjs như 'Unknown cung cấp $ cookieStore'.

'myApp' có dependenciy và 'ngCookies' và angular-cookies.min.js được mã hóa, vậy điều gì sai với mã đó?

Thực tế là tôi đang làm điều này trong .config?

+1

Tại sao bạn cũng không hiển thị cho chúng tôi mã khởi tạo 'myApp' của bạn. – Chandermani

Trả lời

14

Bởi vì nó chỉ có thể vượt qua các nhà cung cấp khi cấu hình, tôi cuối cùng đã thực hiện việc ghi đè các thông số http tôi không phải với một máy biến áp yêu cầu nhưng bằng cách tạo ra một dịch vụ như nhà máy để thực hiện yêu cầu.

Dưới đây là một ví dụ mã của dịch vụ (không kiểm tra, chỉ cần cung cấp thông tin):

angular.module('myapp-http-request', []); 
angular.module('myapp-http-request') 
.factory('MyRequests', function($http, $cookieStore){ 

    return { 
     request: function(method, url, data, okCallback, koCallback){ 
      $http({ 
       method: method, 
       url: url, 
       data: data 
      }).success(okCallback).error(koCallback); 
     }, 
     authentifiedRequest: function(method, url, data, okCallback, koCallback){ 
      $http({ 
       method: method, 
       url: url, 
       data: data, 
       headers: {'Authorization': $cookieStore.get('token')} 
      }).success(okCallback).error(koCallback); 
     } 
    } 
}); 

Và ví dụ về việc sử dụng (không kiểm tra, chỉ cần cung cấp thông tin):

angular.module('sharewebapp', ['myapp-http-request']) 
.controller('MyController', ['MyRequests', function(MyRequests){ 
    MyRequests.authentifiedRequest('DELETE', '/logout', '', function(){alert('logged-out');}, function(){alert('error');}) 
}]); 
+0

Điều này cũng có vấn đề vì các tiêu đề từ nhà máy sẽ tĩnh. Hãy thử đăng nhập, sau đó ra, sau đó trong một lần nữa và bạn sẽ nhận ra rằng nó vẫn sử dụng mã thông báo cũ. – Rob

2

Bạn có thể cần phải thêm cookieStore

myApp.config(['$httpProvider', '$cookieStore', function($httpProvider, $cookieStore) 
+0

đã được kiểm tra và lỗi biến mất nhưng sau đó tôi nhận được 'không thể thực hiện được trên không xác định', nghĩa là $ cookieStore là không xác định – kij

+0

oh đó là sự thật. trong phần cấu hình, bạn chỉ có thể sử dụng các nhà cung cấp, trong khi trong phần .run bạn chỉ có thể sử dụng các cá thể. tôi đoán cookieStore không phải là nhà cung cấp –

+0

Đã bị hỏng. Có cách nào khác để tự động đặt tiêu đề khi yêu cầu với $ http không? – kij

2

Tôi đã gặp phải vấn đề tương tự này vì vậy tôi sẽ đăng bài như thế nào tôi có xung quanh nó. Về cơ bản, tôi đã sử dụng mô đun $ injector để lấy thủ công một phiên bản dịch vụ mà tôi cần. Lưu ý điều này cũng hoạt động cho các dịch vụ do người dùng xác định.

angular.module('app'). 
config(config); 

config.$inject = ['$httpProvider']; 

function config($httpProvider) { 
    //Inject using the $injector 
    $httpProvider.interceptors.push(['$injector', function($injector){ 
    return { 
    request: function(config) { 

     //Get access by injecting an instance of the desired module/service 
     let $cookieStore = $injector.get('$cookieStore'); 

     let token = $cookieStore.get('your-cookie-name'); 
     if (token) { 
     config.headers['x-access-token'] = token; 
     } 
     return config; 
    } 
    } 
}]) 
} 
Các vấn đề liên quan