Angular: перехватить конкретный запрос с $resource

Я новичок в Angular и работаю над перехватчиком. Я создал angular factory, чтобы получить некоторые данные из такого API:

app.factory('Connection',['$resource',function($resource) {

    return $resource('url',{param1: '1',param2: '55'},);
}]);

Я также создал перехватчик, который выглядит так:

app.factory('connectionInterceptor', function($q,$location) {

    var connectionInterceptor =  {

        response: // code here
        responseError: // code here
    };
    return connectionInterceptor;
});

Перехватчик работает хорошо. Но он перехватывает каждый http-запрос, который я делаю, и я хотел бы, чтобы он работал для определенного ресурса $. Я прочитал в документе angular $resource, что есть способ сделать это, добавив действие/параметр перехватчика в $resource. Итак, я попытался:

app.factory('Connection',['$resource',function($resource) {

    return $resource('http://localhost:8080/api/login',{user: '1',password: '55'}, {}, 
        query: {
            method : 'GET',
            interceptor : 'connectionInterceptor'
        }
    });
}]);

что не сработало. Выдает ошибку: Error in resource configuration for action query. Expected response to contain an object but got an array.

Что я пропустил ?


person Arhyaa    schedule 27.05.2015    source источник
comment
перехватчик всегда будет работать для каждого вызова $resource.   -  person Pankaj Parkar    schedule 27.05.2015
comment
У этого парня была такая же проблема, и он решил ее. И я, к сожалению, не понимаю, как: stackoverflow.com/questions/23021416/   -  person Arhyaa    schedule 27.05.2015
comment
isArray: false false отсутствует?   -  person Pankaj Parkar    schedule 27.05.2015
comment
Почему я должен использовать isArray ?   -  person Arhyaa    schedule 27.05.2015
comment
Может ли основная причина заключаться в том, что вы не внедрили connectionInterceptor в фабрику Connection?   -  person OrenD    schedule 27.05.2015
comment
Вы имеете в виду в return $resource('...') ? Я внедрил его в модуль с помощью $httpProvider.interceptors.push('connectionInterceptor'), и он отлично работал с каждым сделанным мной http-запросом. Кажется, это сработает, если я заменю query строкой, но я до сих пор не понимаю, почему.   -  person Arhyaa    schedule 27.05.2015


Ответы (1)


Как вы сказали, перехватчики устанавливаются глобально. Мне пришлось добавить тест к моему ответу, чтобы проверить URL-адрес $resource и добавить некоторую конкретную обработку.

 module.factory('interceptor', function() {

     var interceptor =  {

        response: function(response) {

           if (response.config.url.startsWith('my url')) {
               // some treatment
           }
           else
               // other treatment
           return response;
        }
        return connectionInterceptor;
});
person Arhyaa    schedule 01.06.2015