[AngularJS] $http 인터셉터
1. 인터셉터가 필요한 이유
원격 서버를 호출할 때마다 또는 서버로부터 응답을 받을 때마다 특정한 행동을 수행해야 할 필요가 있다고 생각해보자. 예를 들어, 목적지 URL에 인증 토큰을 URL 매개변수에 추가해야 한다고 가정해보자. 물론 모든 모델의 URL을 필요에 맞게 수정해도 되겠지만, 서비스의 개수가 엄청나다면 이 일 또한 쉬운 일은 아닐 것이다. 어느 한 곳만 변경하면 외부로 나가는 모든 호출에 이 사항이 적용될 수 있다면 멋지지 않겠는가? 어느 한 부분에서 외부로 나가거나 혹은 외부로부터 들어오는 서비스 호출을 가로채서 필요한 로직을 수행할 수 있다면 편리하지 않을까?
2. 인터셉터의 활용
이번에는 외부의 원격 서버를 호출할 때 로딩 중 표시가 나타나게 하고, 호출이 완료되면 표시가 사라지도록 하는 방법을 확인해보자. 우선, 인터셉터를 구현해야 한다. 이 인터셉터는 loadingInterceptor라는 이름으로 구현하여 LoadingService 서비스에 주입할 예정이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | myModule.factory('loadingInterceptor', function(LoadingService) { var loadingInterceptor = { request: function (config) { LoadingService.setLoading(true); return config; }, response: function (response) { LoadingService.setLoading(false); return response; } }; return loadingInterceptor; }); | cs |
우리에게 필요한 부분은 request 및 response 호출을 가로채기 위해 loadingInterceptor 팩토리 객체에 관련 메서드를 구현하는 것이다. config 및 response 메서드 내에서는 LoadingService.setLoading(true)와 LoadingService.setLoading(false) 구문을 실행하여 로딩 중 표시가 켜지거나 꺼지게 한다.
이제 인터셉터를 구현했으므로 이 객체를 $httpProvider.interceptors 배열에 다음과 같이 추가해준다.
1 2 3 4 5 6 7 8 | myModule.config(function ($routeProvider, $httpProvider) { //... //인터셉터 $httpProvider.interceptors.push('loadingInterceptor'); //... }); | cs |
myModule.config 블록에서는 $httpProvider 객체를 주입하여 이 객체의 interceptors 배열에 인터셉터를 추가해야 한다. 일단, $httpProvider 객체에 접근하게 되면 $httpProvider.interceptors.push('loadingInterceptor')와 같이 인터셉터를 추가할 수 있다.
'이전 게시글 > 컴퓨터# AngularJS' 카테고리의 다른 글
[AngularJS] MVC모델과 사용장점 (0) | 2016.05.06 |
---|---|
AngularJS의 기본기 scope,model,view,controller,directives 알아보기 (0) | 2016.03.25 |
[AngularJS 기초 강의] 앵귤러JS 프레임워크의 의미와 재미 (0) | 2016.03.25 |