express
는 Nodejs에서 사용하는 웹 프레임워크다.
express
를 사용해서response
,request
를 주고 받는데,
response를 보내줄 때 헷갈리는 부분들이 많아서 정리해보고자 한다.
res.json()
,res.send()
,res.end()
이렇게 3가지!
Express 서버가 HTTP 요청을 받게되면, res를 반환하게 된다.
(아래에서 res는 NodeJs만의 업그레이드된 response object)app.get("/api/login", (req, res) => { // ... do something ... });
먼저,
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()는 기본적으로 response를 보내는 역할을 한다.
res.send
는 우리가 어떤 데이터를 보내는지 파악을 해서
이에 알맞게 Contnet-Type을 지정해준다.(Buffer,String, Object, Array)
ex) Buffer 데이터를 반환
res.send는 자동으로
Content-Type을 application/octet-stream으로 지정
→ 웹개발자들은 데이터를 주고 받을때 보통 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()는 보내줄 데이터가 없을 때 사용한다.(주로 404를 리턴 할 때)
하지만,res.json()
을 쓰나res.send()
를 쓰나
응답을 종료해주는 역할은 하기 때문에 굳이 명시적으로 표시해줄 필요는 없다.