1

Мой вопрос о перехватчике $resource (responseError). Я хочу подчеркнуть, что угловые множители I основаны на V1.3.6.

Проблема:

app.factory('authInterceptor',['$q', '$location', '$log', function($q, $location, $log){ 
    $log.debug('this is a regular factory with injection'); 
    return { 
     responseError: function(response){ 
      console.log(response) 
      // problem is that I cant check 401 by response.status, 
      // because the response here is AN ERROR OBJECT like `SyntaxError: ...`. Anyway to get the status? 
      return $q.reject(response); 
     } 
    } 
}]) 

Когда я получаю 401 ответ, аргументы responseError «s ошибка OBJECT как SyntaxError: Unexpected token U, потому что réponse от сервера обычный текст Unathorized со статусом 401.

Но я хочу получить response.status и сделать что-нибудь, если это 401.

Любая помощь будет оценена по достоинству.

ответ

0

Вот простой перехватчик, который обрабатывает 401С, а также делает некоторую конфигурацию:

angular.module('notesApp', []) 
    .factory('AuthInterceptor',['AuthInfoService', '$q', function(AuthInfoService, $q) { 
     return { 

     responseError: function(responseError) { 
       if (responseError.status === 401) { // authentication issue 
        //redirect user to login or do something else... 
       } 
       return $q.reject(responseError); 
     } 
    }; 
}]) 
.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push('AuthInterceptor'); 
}]); 

** Вот перехватчик, что только перехватывает поступающие ответы с не 200-кодом состояния ** Если. код состояния - 401, пользователь перенаправляется на страницу входа. В этом случае обещание отклоняется, так что контроллер или служба по-прежнему видит сбой

+0

Итак, где 'responseError.status'? Функция responseError не определена. А что такое 'AuthInfoService'? – creeper

+0

Я отредактировал successHandler, чтобы сделать вещи немного яснее. responseError является аргументом в successHandler обещания. AuthInfoService - это служба, которая помогает получить заголовок авторизации - это запрос. Он также может перенаправить пользователя на страницу входа в систему. Но вам это не нужно. – raneshu

+0

Пожалуйста, снова проверьте мой вопрос. Моя проблема в том, что 'response.status' не определено! и это ваш «responseError.status» не определен. Angular1.3.6 – creeper

3

Этот вопрос должен быть закрыт, потому что я, наконец, нашел ответ самостоятельно.

Когда ответ 401/404 и что-нибудь кроме 200, transformResponse все еще выполнено и Ошибка произошло! Эта ошибка просто покрывает нормальный ответ (имеет свойство состояния), поэтому я никогда не получаю исходный ответ внутри перехватчика!

Я думаю, что глупо исполнять transformResponse, если статус ответа не 200! И внутри transformResponse, вы не можете получить доступ к коду состояния ...

+1

Вы можете принять свой собственный ответ –