2016-06-12 110 views
0

我相信一个类似的问题已经被提出并回答了很多次,但我想我并没有正确地描述这个问题,因为我还没有找到任何对我有用的答案。如何访问JSON对象的动态属性? (Node.js)

我使用节点发送一个API请求,并正在返回数据到我的角度的应用,因为这样:

app.get('/personInfo/:personName', function(req,res){ 

    Module.Person.getByName(req.params.personName) 
    .then(function (person) { 
     res.json(person); 
    }); 
}); 

该应用涵盖的反应,通过凭借以下脚本的:

$scope.submit = function(){ 
    $http.get('/personInfo/' + $scope.person.name).success(function(response){ 
     console.log(response); 
    }); 
}; 

($ scope.person链接到一些领域我的.html文件,它似乎正常工作)

我得到这个回(假设我通过$ scope.person.name通过约翰尼)

johnny:Object 
__proto__:Object 

第一个对象包含我想要的数据...所以我无法直接访问它的属性。

我不能在此进行一个简单的response.id, response.name, response.profileIconId等......我在访问它是这样的:

response.johnny.property ......这,显然...

上午什么我做错了?是否可以使用某种形式的格式化或解析,无论是在服务器级别还是客户端级别,都可以直接访问对象的属性,而无需指定动态父级?所以我需要做的人 -

+0

'$ http.get( '/ personInfo /' + $ scope.person.name)'是危险的,因为它的风险错乱当人名包含URL特殊字符时,请求(最好)或注入攻击(最坏)。 **始终**正确编码数据。在这种情况下,使用'encodeURIComponentI()'。 – Tomalak

+0

encodeURIComponent()?为了保持简单,我在这些脚本中改变了很多东西。但我以前不知道这一点,我很欣赏它。 –

+0

检查服务器端代码,看看'person'对象是否包含类似'johny:{...}'的东西。这可能是你得到回复的原因 –

回答

0

行,所以这似乎工作...

我通过测试该person.x(x =从PERSONNAME PARAM)返回正是我想要的对象想通了。 personName,因为我不知道名字,只是通过一个与参数匹配的未知属性,它的工作原理!

res.json(person [req.params.personName]);

回报: Object {id: 19897772, name: "Johnny", profile: 937, rank: 12, revisionDate: 1463522178000}

,现在我能做的response.id,name,profile etc. ...

+0

很好,但是如果你编辑Module.Person.getByName()返回数据[personName] –

+0

''代表一个连接到场景后面的API的模块,那么它会更清洁你的代码,所以我直接使用该代码从文档 - 但我会考虑这一点,谢谢。 –