2015-11-01 54 views
1

我從角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) 

任何關聯的呢?

+0

我認爲這個問題是你的'成功「和」錯誤「功能正在返回'angular.noop',因此'Auth.login'不會將承諾返回給您的控制器 –

+0

我應該怎麼做呢?因爲這是我們從angular-fullstack生成器獲得的樣板代碼,我不確定如果刪除'angular.noop',它還會破壞其他什麼功能。 – DeadMan

+0

第二個想法是,'angular.noop'與另一個不同的上下文你的'Auth.login'並不重要。嘗試將'function(error)'作爲第二個參數傳遞給'then()',作爲@Bastien在他的回答中建議的 –

回答

0

你嘗試:

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'; 
}); 

的方法「然後」有多個參數:首先是成功的處理程序,第二個是錯誤處理程序

+0

一點點的解釋總是很好,有助於大家理解。 – 2015-11-01 16:41:21

+0

對不起:該方法「然後」有多個參數:第一個是成功處理程序,第二個是錯誤處理程序 – FakeSkdr

+0

對不起:我試過你建議的方式,但我還沒有得到它的工作。我再次更新了這個問題,你可以看看@Navoneel – DeadMan

相關問題