Express.js에서 res.send와 res.json의 차이점


200

사이의 실제 차이가 무엇 res.sendres.json모두 클라이언트에 대한 응답의 동일한 작업을 수행하는 것 등입니다.


73
답변을 게시하는 사람들이 github에 어떻게 소스 코드를 읽었는지 주목하십시오. 이것은 배우고 확립하는 좋은 습관입니다. 진실은 근원에있다.
피터 리용

31
@PeterLyons 나는 이것이 좋은 습관이라고 동의하지만, 램이 질문을하는 대신 소스를보아야한다는 것을 의미 했습니까? 이것이이 사이트의 목적을 무너 뜨리지 않습니까? 이 질문의 존재는 좋은 출처 (The Source!)를 언급하는 답변과 함께 유용합니다.
LinusR

3
그렇습니다, 한 남자에게 물고기와 모든 것을 가르치십시오.
Peter Lyons

71
"RTFS"(소스 읽기)라는 메시지가 표시되면 실제로 문서가 필요한 내용을 전달하지 못하는 것입니다. 예, 출처를 밝히면 확인할 수 있지만 모호한 경우를 제외하고는 출처를 확인할 필요가 없습니다. 이러한 모든 Express 기능은 정말 훌륭하지만 문서는 많이 부족합니다. 그래서 사람들이 문서에서 이해할 수없는 표현에 관한 질문으로 가득합니다 (나에게 일어난 일).
Juan Lanus

3
때로는 읽기 소스가 충분하지 않고 답변에서 좋은 설명이 발생할 수 있으므로 관련된 개념을 가장 잘 이해할 수 있습니다. 어떤 사람들은 단순히 소스를 읽고 이해하지만, 반드시 자바 스크립트에 익숙하지 않은 초보자는 어떻습니까? 생각 해봐
cram2208

답변:


210

상기 방법은 오브젝트 또는 어레이가 전달 될 때와 동일하지만, res.json()또한 비 객체 변환 할 nullundefined유효 JSON 아니다.

이 방법은 json replacerjson spaces응용 프로그램 설정 도 사용 하므로 더 많은 옵션으로 JSON 형식을 지정할 수 있습니다. 이러한 옵션은 다음과 같이 설정됩니다.

app.set('json spaces', 2);
app.set('json replacer', replacer);

그리고 다음 JSON.stringify()과 같이 전달되었습니다 .

JSON.stringify(value, replacer, spacing);
// value: object to format
// replacer: rules for transforming properties encountered during stringifying
// spacing: the number of spaces for indentation

다음은 res.json()send 메소드에없는 메소드 의 코드입니다 .

var app = this.app;
var replacer = app.get('json replacer');
var spaces = app.get('json spaces');
var body = JSON.stringify(obj, replacer, spaces);

이 방법 res.send()은 결국 a 로 끝납니다.

this.charset = this.charset || 'utf-8';
this.get('Content-Type') || this.set('Content-Type', 'application/json');

return this.send(body);


16

보낸 헤더를 보면 ...
res.send는 content-type : text / html을
사용하고 res.json은 content-type : application / json을 사용합니다


0

res.json인수를 JSON으로 강제합니다. res.sendJSON이 아닌 객체 또는 배열을 가져 와서 다른 유형을 보냅니다. 예를 들면 다음과 같습니다.

JSON 번호를 반환합니다.

res.json(100)

그러면 상태 코드가 반환되고 sendStatus를 사용하라는 경고가 표시됩니다.

res.send(100)

인수가 JSON 객체 또는 배열이 아닌 경우 (null, undefined, boolean, string) JSON으로 전송되도록하려면을 사용하십시오 res.json.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.