Служба 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" имеет несколько параметров: первый для обработчика успеха, второй для обработчика ошибок