使用节点或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实际写下这样的内容并在末尾添加换行符呢?

回答:

该响应也是一个字符串,如果您要发送经过修饰的响应,出于某种尴尬的原因,可以使用类似 JSON.stringify(anObject, null, 3)

同样重要的是将Content-Type标头设置为application/json

var http = require('http');

var app = http.createServer(function(req,res){

res.setHeader('Content-Type', 'application/json');

res.end(JSON.stringify({ a: 1 }));

});

app.listen(3000);

// > {"a":1}

美化:

var http = require('http');

var app = http.createServer(function(req,res){

res.setHeader('Content-Type', 'application/json');

res.end(JSON.stringify({ a: 1 }, null, 3));

});

app.listen(3000);

// > {

// > "a": 1

// > }

我不确定为什么要用换行符终止它,但是您可以这样做JSON.stringify(...) + '\n'

表达

在Express中,您可以通过更改选项来实现。

'json replacer' JSON替换器回调,默认为null

'json spaces' 用于格式化的JSON响应空间,开发中默认为2,生产中默认为0

实际不建议设置为40

app.set('json spaces', 40);

然后,您可以使用一些json进行响应。

res.json({ a: 1 });

它将使用'json spaces‘配置进行美化。

以上是 使用节点或Express返回JSON的正确方法 的全部内容, 来源链接: utcz.com/qa/424745.html

回到顶部