Assim, pode-se tentar ir buscar o seguinte objecto 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"
}
$
Existe uma maneira de produzir exatamente o mesmo corpo em uma resposta de um servidor usando nó ou expresso? Claramente, pode-se definir os cabeçalhos e indicar que o tipo de conteúdo da resposta será "application/json", mas depois há diferentes maneiras de escrever/enviar o objeto. A que eu tenho visto ser comumente usada é usando um comando do formulário:
response.write(JSON.stringify(anObject));
Contudo, isto tem dois pontos onde se poderia argumentar como se fossem "problemas":
Outra ideia é usar o comando:
response.send(anObject);
Isto parece estar enviando um objeto JSON baseado na saída de cacho semelhante ao primeiro exemplo acima. No entanto, não há um novo caractere de linha no final do corpo quando o encaracolamento está sendo usado novamente em um terminal. Então, como se pode realmente escrever algo como isto com um novo caractere de linha anexado no final usando nó ou nó/expressão?
Essa resposta também é uma string, se você quiser enviar a resposta pré-estificada, por alguma razão estranha, você poderia usar algo como JSON.stringify(anObject, null, 3)
É importante que você configure o cabeçalho Content-Type' para
application/json', também.
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}
Prettified:
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
// > }
I'não sei exatamente por que você quer terminar com uma nova linha, mas você poderia apenas fazer JSON.stringify(...) + '\n'
para conseguir isso.
Em expresso, você pode fazer isso mudando as opções em seu lugar.
'json substituto'
JSON substituto callback, nulo por defeito
'espaços json'
Espaços de resposta JSON para formatação, padrão para 2 em desenvolvimento, 0 em produção
Não é realmente recomendado definir para 40_
app.set('json spaces', 40);
Depois podias responder com um pastor.
res.json({ a: 1 });
It'utilizará os 'espaços json
' configuração para embelezá-lo.
Se você está tentando enviar um arquivo json, você pode usar streams
var usersFilePath = path.join(__dirname, 'users.min.json');
apiRouter.get('/users', function(req, res){
var readable = fs.createReadStream(usersFilePath);
readable.pipe(res);
});