프로그래밍 언어/HTML,CSS,JS

Node 또는 Express를 사용하여 JSON을 반환하는 올바른 방법

Rateye 2021. 7. 6. 10:25
728x90
반응형

 

질문 : Node 또는 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 객체를 보내는 것으로 보입니다. 그러나 컬이 터미널에서 다시 사용될 때 본문 끝에 줄 바꿈 문자가 없습니다. 그렇다면 실제로 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' 대체 콜백, 기본적으로 null

'json spaces' 형식화를위한 JSON 응답 공간, 기본값은 개발시 2, 프로덕션에서는 0입니다.

실제로 40으로 설정하지 않는 것이 좋습니다.

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

그런 다음 json으로 응답 할 수 있습니다.

res.json({ a: 1 });

'json spaces '구성을 사용하여 예쁘게 만듭니다.

출처 : https://stackoverflow.com/questions/19696240/proper-way-to-return-json-using-node-or-express
728x90
반응형