2017-11-18 29 views
0

我一直在使用nodeng4Node.js的表達res.json行爲

,當我遇到使用res.json發送陣列回角4前端,像res.json(arrayResult)來到工作在我的項目之一。令人驚訝的是,在Angular收到它之後我不能使用JSON.parse(arrayResult),因爲它會拋出一個錯誤,說明意外的輸入結束。然而,我可以通過結果[i]訪問所有數據,就像任何普通數組一樣。

我不太明白爲什麼res.json()不會將我的數組作爲字符串發送到前端。是否有任何內部轉換?爲什麼我可以通過索引訪問內容,甚至不需要解析它或使用它進行任何轉換?

+0

'res.json'正在設置'application/json'響應的'content-type':https://github.com/expressjs/express/blob/master/lib/response.js#L264 –

+1

'res.json()'不會將你的內容作爲JSON字符串(使用適當的內容類型)發送 - 這就是它的工作原理。如果您在Chrome瀏覽器的網絡標籤中查看該請求/響應,則可以準確查看通過線路發送的內容。可能Angular已經爲你解析它,所以它已經是一個Javascript對象,因此你不能重新解析它。 – jfriend00

回答

0

服務器確實將您的json數據作爲字符串發送。除字符串外,服務器還將Content-Type標頭傳遞給客戶端,告訴客戶端您收到的是哪種數據。

所以如果Content-Typetext/html你的客戶會認爲他收到了一個HTML文件。

在你的情況,res.json使用Content-Type: application/json告訴客戶端他得到的字符串實際上是一個json對象,所以不需要你使用JSON.parse

您可以在headers屬性下看到Content-Type