2016-03-27 38 views
1

我试图用每个请求来标识用户。 现在这是我的routes文件:AngularJs用每个请求检查用户

(function() { 

angular.module('employeeApp').config(routeModule).run(run); 

routeModule.$inject = ['$routeProvider']; 

function routeModule($routeProvider) 
{ 
    $routeProvider.when('/', { 
     templateUrl: '../views/login.html', 
     controller: 'authenticationController', 
     controllerAs: 'authenticationCtrl' 
    }) 
    .when('/home', { 
     templateUrl: '../views/index.html', 
     controller: 'homeController', 
     controllerAs: 'homeCtrl', 
     resolve: { 
      message: function(authenticationFactory){ 
       return authenticationFactory.validateUser(); 
      } 
     } 
    }) 
    .when('/werknemer/:id', { 
     templateUrl: '../views/employee/employee.html', 
     controller: 'employeeController', 
     controllerAs: 'employeeCtrl' 
    }) 
    .otherwise({ 
     redirectTo: '/' 
    }); 
} 


function run(authenticationFactory) 
{ 
    authenticationFactory.validateUser() 
    .then(function (response) { 
     console.log('validateuser'); 
     constants.firstname = response.data.result.Employee.FirstName; 
     constants.companyid = response.data.result.Employee.CompanyId; 
     constants.employeeid = response.data.result.Employee.EmployeeId; 

    }, function() { 
     $location.path('/'); 
}); 
} 

})(); 

function run使用看起来像这样的authenticationFactory

(function() 
{ 
    angular.module('employeeApp').factory('authenticationFactory', authenticationFactory); 

    function authenticationFactory($cookieStore,$cookies,requestFactory,$location,GLOBALS,constants) 
    { 
     var factory = {}; 



     factory.validateUser = function() 
     { 
      var vm = this; 

      if($location.path() != '/') 
      { 
       var api_token = factory.getToken(); 

       factory.isValidToken(api_token).then(function(response) { 
        if (response.status != 200) { 
         $location.path('/'); 
        } 
        data = {"api_token": api_token}; 
        requestFactory.post(GLOBALS.url + 'show/employee/' + $cookies.get('employeeid'), data) 
       }); 
      } 
     } 

     return factory; 
    } 
})() 

但是现在我收到我的控制台错误:

routes.js:38 Uncaught TypeError: Cannot read property 'then' of undefined

我在做什么错?

- 编辑 -

factory.validateUser = function() 
     { 
      var vm = this; 

      if($location.path() != '/') 
      { 
       var api_token = factory.getToken(); 

       factory.isValidToken(api_token).then(function(response) { 
        if (response.status != 200) { 
         $location.path('/'); 
        } 
        data = {"api_token": api_token}; 
        return requestFactory.post(GLOBALS.url + 'show/employee/' + $cookies.get('employeeid'), data) 
       }); 
      } 
     } 
+0

'factory.validateUser'不返回请求承诺 –

+0

即使我这样做,我收到相同的错误!看我的编辑。 – Jamie

+0

请参考关于[$ q]的文档(https://docs.angularjs.org/api/ng/service/$q)你需要这个返回一个probise(来自'factory.validateUser')你解决/验证过程后手动拒绝 –

回答

0

你的ValidateUser函数返回咱这if语句失败,决心机制总是希望返回的承诺。

尝试if语句之后添加该自动分辨承诺,作为一个其他

var q = $q.defer(); 
q.resolve(); 
return q.promise; 

不要忘记注入$ Q(AngularJS的承诺实现)到服务。

相关问题