1) ресурсы у ангуляра сыроваты, добавил в них функцию парсера для разбора ответа
2) сервер возращает не только 200 статус, так что ошибки попадают по назначению
3) глобальный метод обработки ошибок
App.config(function( $httpProvider ) {
$httpProvider.responseInterceptors.push(function($q, $window, $rootScope, $location) {
return function(promise) {
return promise.then(function(response) {
// success
return response;
}, function(response) {
// error
return $q.reject(response);
});
}
});
где App ваше приложение