使用节点或Express返回JSON的正确方法

因此,可以尝试获取以下JSON对象:

$ curl -i -X GET http://echo.jsontest.com/key/value/anotherKey/anotherValue
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=ISO-8859-1
Date: Wed, 30 Oct 2013 22:19:10 GMT
Server: Google Frontend
Cache-Control: private
Alternate-Protocol: 80:quic,80:quic
Transfer-Encoding: chunked

{
   "anotherKey": "anotherValue",
   "key": "value"
}
$

有没有一种方法可以使用node或express在服务器的响应中生成完全相同的主体?显然,可以设置标头并指示响应的内容类型将为“ application / json”,但是存在多种写入/发送对象的方法。我经常看到的一种是通过使用以下形式的命令:

response.write(JSON.stringify(anObject));

但是,这有两点可以使人争辩为“问题”:

  • 我们正在发送一个字符串。
  • 此外,最后没有换行符。

另一个想法是使用命令:

response.send(anObject);

这似乎是基于curl的输出发送JSON对象,类似于上面的第一个示例。但是,当在终端上再次使用curl时,在主体的末端没有换行符。那么,如何使用node或node / express实际写下这样的内容并在末尾添加换行符呢?

神无小哥2020/03/17 17:05:25

从Express.js 3x开始,响应对象具有json()方法,该方法可以为您正确设置所有标头,并以JSON格式返回响应。

例:

res.json({"foo": "bar"});
Eva小胖2020/03/17 17:05:25

您可以使用管道和许多处理器之一来美化它。您的应用应始终以尽可能小的负载进行响应。

$ curl -i -X GET http://echo.jsontest.com/key/value/anotherKey/anotherValue | underscore print

https://github.com/ddopson/underscore-cli

梅Harry米亚2020/03/17 17:05:25

res.json()功能在大多数情况下应足够。

app.get('/', (req, res) => res.json({ answer: 42 }));

res.json()函数使用转换您传递给JSON的参数JSON.stringify()并将Content-Type标头设置为application/json; charset=utf-8以便HTTP客户端知道自动解析响应。