Мой сервис API продолжал падать в случае ошибки - AngularJS - PullRequest
0 голосов
/ 21 мая 2019

Услуги

app.service('service', function ($http, $q) {

    //Testing code
    var self = this;

    self.login = (user) => {
        let defer = $q.defer();
        let login  = {
            username: user.username,
            password: user.password
        };

        $http({
            method: 'POST',
            url: `http://1.1.1.1/login`,
            data: login
        }).then(
            (response) => {
                defer.resolve(response.data)
            },
            (error) => defer.reject(error)
        );

        return defer.promise;
    };

});

Контроллер

angular.module('app').controller('controller',
    ['$scope', '$rootScope', '$location', 'service','$log' ,'$q',
    function($scope, $rootScope, $location, service, $log, $q) {

        console.log('controller called');

        $scope.changeView = function(view) {
            $location.path(view);
        };

        $scope.user = {username: 'john@nuc.com', password: 'qqq'};
        console.log($scope.user);

        service.login($scope.user)
        .then(
            (response) => {
                console.log('success');
            },
            (error) => console.log('error' + error.data)
        );

    }]);

Результат

Я вижу это

{location: "http://ddddd.com/hom…zg2fQ.D9pDqUBD3bcKnH_bPoGCpd-odxJ48LUZTKOGZZnV0Y0"}

Я не знаю, почему я попал в раздел error, но мне кажется, что я получил правильный ответ от сервера.

Может кто-нибудь, пожалуйста, пролить свет на это?

1 Ответ

1 голос
/ 21 мая 2019

Сервис использует отложенный анти-шаблон . Хотя это не является источником проблемы, исправьте ее и добавьте операторы console.log:

onboardingApp.service('apiService', function ($http, $q, $localStorage) {

    //Testing code
    var self = this;

    self.login = (user) => {
        ̶l̶e̶t̶ ̶d̶e̶f̶e̶r̶ ̶=̶ ̶$̶q̶.̶d̶e̶f̶e̶r̶(̶)̶;̶
        let login  = {
            username: user.username,
            password: user.password
        };

        return $http({
            method: 'POST',
            url: `http://ddd.com/login`,
            data: login
        }).then(
            (response) => {
                console.log("success", response);
                setAuthToken(response);
                return response.data;
            },
            (error) => {
               console.log("error",error);
               throw error;
            }
        );
    };    
});

Это должно позволить вам диагностировать проблему.


После успешного входа в систему он должен вернуть код состояния 200 вместо 302. Как настроить ваш код так, чтобы он принимал 302 как успех вместо ошибки?

В преобразование отклоненного обещания в успешное обещание просто return значений в обработчик отклонения:

       return $http({
            method: 'POST',
            url: `http://ddd.com/login`,
            data: login
        }).then(
            (response) => {
                console.log("success", response);
                setAuthToken(response);
                return response.data;
            },
            (error) => {
               console.log("error",error);
               if (error.status==302) {
                   console.log("Converting erroneous API response");
                   error.status==200;
                   return error.data;
               };
               //ELSE
               throw error;
            }
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...