[Node] Express의 res.json() res.send() res.end()

짱쫑·2021년 12월 12일
0
post-thumbnail

Express로 작업할 때 요청 및 응답 개체에 액세스할 수 있으며 response를 사용해 요청자에게 일부 응답을 다시 보낼 수 있다. res.json(), res.send(), res.end()와 같이 사용할 수 있는 메서드가 많이있다. 이것들이 어떻게 다른지 알아본다.

응답객체

응답 객체는 노드의 핵심 객체인 http.ServerResponse의 인스턴스이다. 응답 객체는 요청 핸들러의 두 번째 매개변수로 사용되므로 이름은 원하는 대로 바꿀 수 있지만, 보통 res, resp, response를 사용한다. 익스프레스는 이 객체의 추가적인 기능을 제공한다.

::res.send()

res.send는 기본적으로 response를 보내는 역할을 한다.
기본적으로 서버에서 response 처리를 할 때 Content-Type을 지정해주어야 한다.
res.send는 우리가 어떤 데이터를 보내는지 파악해서 이에 맞는 Content-Type을 지정해준다. 이는 Buffer, String, Object, Array 일 수 있으며 기본 타입은 text/html이다.

::res.json()

웹개발자들이 데이터를 주고 받을 때 보통 RESTful API의 형태로 데이터를 주고 받는데 보통 이때 사용하는 형식은 JSON일 확률이 매우 높다.

많은 개발자들이 express를 사용해서 RESTful API를 만들고 있고, 대부분의 경우 그러한 API는 JSON데이터를 반환한다. 여기서 문제는 당연히 res.send()를 사용해서 JSON데이터를 반환할 것인지의 여부인데 res.send()를 써야할지 res.json()을 써야할지 고민에 빠진다.

res.json()은 res.send()로 JSON형태의 데이터를 보낼 때 사용할 수 없는 몇 가지 기능이 있다.
두 가지 옵션을 통해 반환할 JSON데이터의 형식을 정해줄 수 있다.

app.set('json replacer', replacer); // JSON 문자열에 포함시킬 객체의 프로퍼티를 지정해주는 옵션
app.set('json spaces', 2); // 들여쓰기 공백 수 지정

두 옵션은 수집되어 내부적으로 JSON.stringify(object, replacer, space)와 같은 형식으로 전달되고 그 후 res.json()메서드 내부에서 res.send()메서드가 호출되어 전송되게 한다.

::res.end()

이 메서드는 사실 안써도 되는데 보내줄 데이터가 없을 때 사용한다고 한다. 주된 예시가 404를 리턴해주어야 할 때이다. res.json()을 쓰나 res.send()를 쓰나 응답을 종료해주는 역할은 하기 때문에 굳이 명시적으로 표시할 필요는 없다.

profile
不怕慢, 只怕站

0개의 댓글