2013-11-24 92 views
0

目標是檢查用戶是否已登錄。加載頁面時,使用承諾檢查當前用戶。如果用戶未登錄,則服務器返回{}。我的問題是,我不知道如何檢查承諾是否會返回空對象{}如何檢查承諾是否返回空對象

我定義的資源:

myapp.factory('User', function($resource) { 
    return $resource('/users/:userId', {userId: '@id'}, { 
    current: {method:'GET', params: {userId: 'current'}}}); 
}); 

其在resolve屬性用於UI的路由器。該解決方案用於向我的控制器提供數據。

resolve: { 
    user: ['User', function(User) { 
     return User.current(); 
    }] 
}, 
controller : function($scope, $window, user) { 
    $scope.user = user; 

    $scope.userLoggedIn = !isEmptyObject(user); 

    function isEmptyObject(obj) { 
     console.log(obj); 
     var name; 
     for (name in obj) { 
     return false; 
     } 
     return true; 
    }         
} 

快遞服務器端被定義爲:

app.get('/users/current', function(req, res) { 
    console.log(req.isAuthenticated()); 
    console.log(req.user); 
    if (req.isAuthenticated()) { 
     res.send(req.user); 
    } else { 
     console.log("Not Authenticated"); 
     res.send({}); 
    } 
}); 

的問題是,isEmptyObject函數總是返回true。

+0

你正在解決'用戶',但注入'用戶'在控制器(這將是'undefined')? –

+0

是不是更容易從服務器返回對象的屬性像'{notLoggedIn:true}' – charlietfl

回答

0

嘗試:

function isEmptyObject(obj) { 

     if (obj.length && obj.length > 0) 
      return false;   

     if (obj.length === 0) 
      return true;   
    } 

順便說一句,underscore.js插件都有自己的方法:

isEmpty_.isEmpty(object) 

返回true如果對象不包含任何值(沒有枚舉自己的特性)。

_.isEmpty([1, 2, 3]); 
=> false 

_.isEmpty({}); 
=> true 
+0

很好的答案。使用isEmpty爲我工作! –

+0

這是不正確的答案,函數'isEmptyObject'爲空和非空對象都返回undefined – user902383