Служба angularjs с $http.post не вводит как успешные, так и ошибочные обратные вызовы

У меня есть приложение meanjs, сгенерированное из углового-полного стека йоменского генератора

и в этом подлинный угловой сервис как это -

'use strict';

angular.module('app')
    .factory('Auth', function Auth($location, $rootScope, $http, User, $cookieStore, $q) {
        var currentUser = {};
        if ($cookieStore.get('token')) {
            currentUser = User.get();
        }

        return {

            login: function (user, callback) {
                var cb = callback || angular.noop;
                var deferred = $q.defer();
                $http.post('/auth/local', {
                    email: user.email,
                    password: user.password
                }).
                    success(function (data, status, headers, config) {
                        $cookieStore.put('token', data.token);
                        currentUser = User.get();
                        deferred.resolve(data);
                        return cb();
                    }).
                    error(function (data, status, headers, config) {
                        this.logout();
                        deferred.reject(data);
                        return cb(data);
                    }.bind(this));

                return deferred.promise;
            },

            /**
             * Delete access token and user info
             *
             * @param  {Function}
             */
            logout: function () {
                $cookieStore.remove('token');
                currentUser = {};
            },

            getToken: function () {
                return $cookieStore.get('token');
            }
        };
    });

Итак, в основном на моем контроллере страницы входа я делаю что-то вроде этого -

$scope.login = function () {
        $scope.authError = null;
        // Try to login
        Auth.login({
            email: $scope.user.email,
            password: $scope.user.password
        })
            .then(function (data) {
                // Logged in, redirect to home
                console.log(data, 'gee');
                $state.go('app.dashboard-v1');
            })
            .catch(function (err) {
                $scope.authError = 'Email or Password not right';
            });
    };

Итак, я попытался поставить console.log('something'); Заявление как об успехе, так и об ошибках в моем сервисе, но ни в коем случае не печатается. Я отправляю POST http://localhost:9000/auth/local 405 (Method Not Allowed) для моих неправильных учетных данных, это код состояния 405 и 200 для правильных учетных данных. Итак, я должен изменить свой код службы на стороне клиента или код контроллера или код состояния на стороне сервера, чтобы это исправить?

[ОБНОВЛЕНИЕ] Я попробовал ответ, предложенный @Bastien, и изменил код моего контроллера на -

Auth.login({
            email: $scope.user.email,
            password: $scope.user.password
        })
            .then(function (data) {
                // Logged in, redirect to home
                $state.go('app.dashboard-v1');
                toaster.pop('success','message','message');
                console.log(data, 'gee');
            },function(err){
                $scope.authError = 'Email or Password not right';
                console.log('err');
            })

Но я не получаю никакого сообщения на консоли браузера, также я заметил, что я получаю еще одну ошибку в консоли браузера, только когда я ввожу неправильные учетные данные, это выглядит следующим образом:

TypeError: Cannot read property 'data' of undefined
    at angular.js:9408
    at processQueue (angular.js:13248)
    at angular.js:13264
    at Scope.parent.$get.Scope.$eval (angular.js:14466)
    at Scope.parent.$get.Scope.$digest (angular.js:14282)
    at Scope.parent.$get.Scope.$apply (angular.js:14571)
    at done (angular.js:9698)
    at completeRequest (angular.js:9888)
    at XMLHttpRequest.requestLoaded (angular.js:9829)

это имеет какое-либо отношение?

1 ответ

Ты пробовал:

Auth.login({
    email: $scope.user.email,
    password: $scope.user.password
})
.then(function (data) {
    // Logged in, redirect to home
    console.log(data, 'gee');
    $state.go('app.dashboard-v1');
},
function(error){ //2nd function to handle the error (!= 200)
    $scope.authError = 'Email or Password not right';
});

Метод "then" имеет несколько параметров: первый для обработчика успеха, второй для обработчика ошибок

Другие вопросы по тегам