无法访问从快速获取路径返回的json对象的角度

时间:2016-05-22 19:02:21

标签: javascript angularjs json express

我有一个返回以下JSON的快速路由

[{"_id":"573da7305af4c74002790733","postcode":"nr22ry","firstlineofaddress":"20 high house avenue","tenancynumber":"12454663","role":"operative","association":"company","hash":"b6ba35492f3f83a79395386cfc601178dfd11de723d2007daf6bd34160a9ff16c87b1f07835e7a39c20454c6271960930211b365ae05c620809c159a3d7b97de","salt":"8d544f21c436494da859cf5895c414d9","username":"yhy","__v":0}]

在我的角度应用程序中,我有一个带有以下代码的工厂

auth.userRole = function() {
   alert('here');
   if (auth.isLoggedIn()){
          return $http.get('/roles/' + auth.currentUser(), {
headers: {Authorization: 'Bearer '+auth.getToken()}
  }).then(function(response){          
    //the info is here, i just can't get to it!!!

    return response;          
  });   
   }
};

在我的控制器中调用

$scope.therole = auth.userRole(); 

在我看来,我有

用户角色是:{{therole}}

我的问题是,当我调试(使用chrome)我的角度时,可以看到响应中有json(见下文),我无法访问它!我尝试过返回response.data或response.data.role或response.role或response [0] .role等等的不同排列,这些都不会返回空白或导致'属性未定义错误'。 这应该是直截了当所以我显然做了一些非常愚蠢的事情。请帮忙!

Object
config
:
Object
data
:
Array[1]
0
:
Object
__v
:
0
_id
:
"573da7305af4c74002790733"
association
:
"company"
firstlineofaddress
:
"20 high house avenue"
hash
:
 "b6ba35492f3f83a79395386cfc601178dfd11de723d2007daf6bd34160a9ff16c87b1f07835e7a39c20454c6271960930211b365ae05c620809c159a3d7b97de"
postcode
:
"nr22ry"
role
:
"operative"
salt
:
"8d544f21c436494da859cf5895c414d9"
tenancynumber
:
"12454663"
username
:
"yhy"

1 个答案:

答案 0 :(得分:0)

通过以下方式管理以解决我自己的问题:

   auth.theUserInfo = function() {
   if (auth.isLoggedIn()){
          return $http.get('/roles/' + auth.currentUser(), {
headers: {Authorization: 'Bearer '+auth.getToken()}
 }).then(function(response){          
    //the info is here, i just can't get to it!!!

    return response.data[0];
  });   
   }
};

response.data [0]返回整个对象。

然后我意识到我的真​​正问题在于我的控制器,我只是假设通过将函数的返回值分配给它将值传递给它的变量,但我忘了它的所有异步,所以我可以&#t; t假设函数在将返回值赋给变量时将获得结果。 所以我将代码更改为此

auth.theUserInfo().then(function(data) {
   $scope.therole = data.role; 

});

这现在有效!加上我的(现在重命名)theUserInfo函数现在返回整个对象而不仅仅是角色,我可以在控制器的其他地方重新使用它。