我從角fullstack自耕農發電機
產生meanjs應用程序,並在像這樣一個權威性的角度服務angularjs服務 -
'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');
聲明中的成功和錯誤都CA在我的服務裏,但它沒有得到印刷在任何情況下。我發送了一個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)
任何關聯的呢?
我認爲這個問題是你的'成功「和」錯誤「功能正在返回'angular.noop',因此'Auth.login'不會將承諾返回給您的控制器 –
我應該怎麼做呢?因爲這是我們從angular-fullstack生成器獲得的樣板代碼,我不確定如果刪除'angular.noop',它還會破壞其他什麼功能。 – DeadMan
第二個想法是,'angular.noop'與另一個不同的上下文你的'Auth.login'並不重要。嘗試將'function(error)'作爲第二個參數傳遞給'then()',作爲@Bastien在他的回答中建議的 –