2016-06-12 111 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的模塊,那麼它會更清潔你的代碼,所以我直接使用該代碼從文檔 - 但我會考慮這一點,謝謝。 –