[Web Server] res.send(), res.json(), res.end() 차이점

fejigu·2022년 8월 17일
1

Web Server

목록 보기
2/3


🔎 express?

express는 Nodejs에서 사용하는 웹 프레임워크다.

express를 사용해서 response, request를 주고 받는데,
response를 보내줄 때 헷갈리는 부분들이 많아서 정리해보고자 한다.

res.json(), res.send(), res.end() 이렇게 3가지!


🔎 express가 HTTP 요청을 받으면?

Express 서버HTTP 요청을 받게되면, res를 반환하게 된다.
(아래에서 res는 NodeJs만의 업그레이드된 response object)

app.get("/api/login", (req, res) => {
  // ... do something ...
});

🔎 res.send()? res.json()? res.end()?

먼저, res.send()는 send에 전해진 argument에 따라서
Content-type이 자동적으로 만들어진다
.

res.json()은 json이 아닌 것도 json 형식으로 바꾸어서 보내준다.
즉 content-type 헤더를 application/JSON으로 고정한다.
그런데 결국 res.json()도 마지막에 res.send()를 호출한다.

res.end()는 보내줄 아무 데이터도 없는데 response를 끝내고 싶을 때 사용한다.
ex) res.status(400).end();


✅ res.send()

res.send()기본적으로 response를 보내는 역할을 한다.

res.send는 우리가 어떤 데이터를 보내는지 파악을 해서
이에 알맞게 Contnet-Type을 지정해준다.(Buffer,String, Object, Array)

ex) Buffer 데이터를 반환
res.send는 자동으로
Content-Type을 application/octet-stream으로 지정


✅ res.json()

웹개발자들은 데이터를 주고 받을때 보통 RESTful API의 형태로 데이터를 주고 받는다. 이때 사용하는 형식은 대부분 JSON일 것이다.

아래와 같이 서버 응답을 보내줄 것이다.

app.get("/api/login", (req, res) => {
  res.send({ name: "John" });
});

res.json자주 쓰이는 메소드를 구현해놓은 것이다.
즉 안에 들어있는 데이터들을 자동을 json 형식으로 바꾸어 보내준다.

이 경우 header의 모습은 다음과 같을 것이다.
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 17
ETag: W/"11-IkjuL6CqqtmReFMfkkvwC0sKj04"
Date: Fri, 10 Aug 2018 09:34:13 GMT
Connection: keep-alive


✅ res.end()

res.end()는 보내줄 데이터가 없을 때 사용한다.(주로 404를 리턴 할 때)

하지만, res.json()을 쓰나 res.send()를 쓰나
응답을 종료해주는 역할은 하기 때문에
굳이 명시적으로 표시해줄 필요는 없다.

profile
신규 서비스의 기획부터 개발, 운영까지 전 과정을 경험한 주니어 📱

0개의 댓글