세 메서드는 각각 어떤 차이가 있을까요?
Express.js의 응답
Express를 사용하여 응답을 보내는 방법에는 여러 가지가 있음
1
2
3
app.get("/api/test", (req, res) => {
// ... do something ...
});
res
객체
- Node.js에 있는 응답 객체의 향상된 버전
res.send()
1
res.send([body]);
- 전달된 인수를 기반으로 응답 헤더(response header)의
Content-Type
을 자동으로 설정 body
파라미터는 Buffer 객체, 문자열, 객체, 불리언, 배열이 될 수 있음- JSON 데이터 전송을 위해 body에 객체를 넣으면, 응답 헤더의
Content-Type
은 올바르게application/json
이 설정됨 res.set()
으로 따로 설정해 자동으로 설정하는 것을 방지 가능
1
res.send({ hello: "world" }); // Content-Type: application/json; charset=utf-8
1
2
res.set("Content-Type", "text/html");
res.send(Buffer.from("<p>some html</p>"));
res.json()
1
res.json([body]);
- JSON 응답을 전송하는 메서드
res.send()
와 res.json()
의 주요 차이점
res.json()
- 유효한 JSON이 아닌 비 객체(null, undefined 등)도 변환
- json replacer와 json space 설정을 사용
res.send()
- 유효한 JSON이 아닌 비 객체를 변환하지 않음
res.end()
1
res.status(404).end();
- 데이터를 제공하지 않고 응답을 종료하는 경우 사용 가능
- 404 페이지에 유용
- 일부 응답 데이터를 보내고 싶다면
res.send()
,res.json()
등을 사용- 둘은 응답을 종료하기도 하기 때문에
res.end()
를 명시적으로 호출할 필요가 없음
- 둘은 응답을 종료하기도 하기 때문에
결론
응답에 데이터를 보낼 때, res.send()
혹은 res.json()
을 사용
res.send()
- 담긴 응답 데이터의 종류에 따라 응답 헤더의
Content-Type
이 다르게 설정됨 - JSON 데이터도 문제 없이 전송 가능
res.json()
- JSON 데이터를 명시적으로 보내고 싶을 때 사용
- 응답 헤더의
Content-Type
을 자동으로application/json
으로 변경
res.end()
- 보낼 데이터는 없지만 응답을 종료하고 싶은 경우 사용
res.send()
나res.json()
으로 응답을 전송하는 경우에는 사용할 필요가 없음
참고
Difference between res.json vs res.send vs res.end in Express.js