Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 188bdf7

Browse files
committed
feat($http): add response interceptors
1 parent dbd880c commit 188bdf7

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

src/service/http.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ function $HttpProvider() {
8181
}
8282
};
8383

84+
var responseInterceptors = this.responseInterceptors = [];
85+
8486
this.$get = ['$httpBackend', '$browser', '$exceptionHandler', '$cacheFactory', '$rootScope', '$q',
8587
function($httpBackend, $browser, $exceptionHandler, $cacheFactory, $rootScope, $q) {
8688

@@ -129,6 +131,10 @@ function $HttpProvider() {
129131
deferredResp = $q.defer(),
130132
promise = deferredResp.promise;
131133

134+
forEach(responseInterceptors, function(interceptor) {
135+
promise = interceptor(promise);
136+
});
137+
132138
promise.success = function(fn) {
133139
promise.then(function(response) {
134140
fn(response.data, response.status, response.headers, config);

test/service/httpSpec.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,51 @@ describe('$http', function() {
3131
}));
3232

3333

34+
describe('$httpProvider', function() {
35+
36+
describe('interceptors', function() {
37+
38+
it('should default to an empty array', inject(function($httpProvider) {
39+
expect($httpProvider.responseInterceptors).toEqual([]);
40+
}));
41+
42+
43+
it('should pass the responses through interceptors', inject(function($httpProvider, $q) {
44+
// just change the response data and pass the response object along
45+
$httpProvider.responseInterceptors.push(function(httpPromise) {
46+
return httpPromise.then(function(response) {
47+
response.data += '!';
48+
return response;
49+
});
50+
});
51+
52+
// return a new resolved promise representing modified response object
53+
$httpProvider.responseInterceptors.push(function(httpPromise) {
54+
return httpPromise.then(function(response) {
55+
var deferred = $q.defer();
56+
deferred.resolve({
57+
data: response.data + '?',
58+
status: 209,
59+
headers: response.headers,
60+
config: response.config
61+
});
62+
return deferred.promise;
63+
});
64+
});
65+
}, function($http, $httpBackend) {
66+
$httpBackend.expect('GET', '/foo').respond(201, 'Hello');
67+
$http.get('/foo').success(function(data, status) {
68+
expect(data).toBe('Hello!?');
69+
expect(status).toBe(209);
70+
callback();
71+
})
72+
$httpBackend.flush();
73+
expect(callback).toHaveBeenCalledOnce();
74+
}));
75+
});
76+
});
77+
78+
3479
it('should do basic request', function() {
3580
$httpBackend.expect('GET', '/url').respond('');
3681
$http({url: '/url', method: 'GET'});

0 commit comments

Comments
 (0)