正确的方法来使用节点或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" } $ 

有没有一种方法可以在服务器使用节点或expression式的响应中产生完全相同的主体? 显然,可以设置标题,并指出响应的内容types将是“application / json”,但是有不同的方式来写/发送对象。 我见过的常用的是使用下面的命令:

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

但是,有两点可以说是“问题”:

  • 我们正在发送一个string。
  • 而且,最后没有新的线路特征。

另一个想法是使用命令:

 response.send(anObject); 

这似乎是发送一个JSON对象基于curl的输出类似于上面的第一个例子。 但是,在terminal上再次使用curl时,在主体的末尾没有新的行字符。 那么,怎样才能真正写下类似这样的东西,最后使用node或node / express附加一个新的行字符呢?

这个响应也是一个string,如果你想发送响应美化,由于一些尴尬的原因,你可以使用像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.send(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.send(JSON.stringify({ a: 1 }, null, 3)); }); app.listen(3000); // > { // > "a": 1 // > } 

我不确定你为什么要用换行符来终止它,但是你可以用JSON.stringify(...) + '\n'来实现。

performance

在expression中,您可以通过改变选项来做到这一点。

'json replacer' replacercallback,默认情况下为null

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

实际上并不build议设置为40

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

那么你可以用一些json来回应。

 res.json({ a: 1 }); 

它将使用'json spaces 'configuration来对其进行优化。

由于Express.js 3x的响应对象有一个json()方法,它为您正确设置所有标题,并以JSON格式返回响应。

例:

 res.json({"foo": "bar"}); 

如果你想发送一个json文件,你可以使用stream

 var usersFilePath = path.join(__dirname, 'users.min.json'); apiRouter.get('/users', function(req, res){ var readable = fs.createReadStream(usersFilePath); readable.pipe(res); }); 

您可以使用pipe道和许多处理器中的一种对其进行美化。 您的应用程序应始终以尽可能小的负载进行响应。

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

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