express는 NodeJS를 쓰는 사람이라면 모두 알 정도로 유명한 웹 프레임워크이다.
express를 사용해서 response, request를 통해 주고 받도록 되어 있는데, 이 때 특히 response를 보내줄때 혼동이 오는 부분이 있다.
res.json
res.end()
res.end()
이 세가지 중 어떤 것을 써야하는지, 가끔 헷갈릴때가 있고 무슨 차이가 있는지 헷갈릴 수 있다.
express 서버가 http 요청을 받게되면, res를 반환하게 된다.
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를 끝내고 싶을때 사용한다.res.send()
는 기본적으로 response를 보내는 역할을 한다. 그리고 이게 기본이라고 생각하면 된다.
기본적으로 서버에서 response 처리를 할 때 Content-type를 지정해주어야 한다.
res.send는 우리가 어떤 데이터를 보내는지 파악을 해서 이에 알맞게 Content-type을 지정해준다. 이는 Buffer, String, Object, Array일 수 있다.
웹 개발자들이 데이터를 주고 받을때 보통 RESTful API 형태로 데이터를 주고 받는다. 보통 이때 사용하는 형식은 JSON일 확률이 거의 대부분일 것이다.
app.get("/api/login", (req, res) => {
res.send({ name: "hodoo" });
});
res.json()
은 안에 들어있는 데이터들을 자동으로 json 형식으로 바꾸어 보내준다.
사실 이 메소드는 사용하지 않아도 된다. 보내줄 데이터가 없을때 사용한다고 하는데, 주로 예를 드는 것이 404 에러처리를 리턴해주어야 할때다.
res.json
을 쓰나 res.send()
를 쓰나 응답을 종료해주는 역할을 하기 때문에 굳이 명시적으로 표시해줄 필요는 없다.