2017-11-18 27 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