(nodejs) Express : res.send() res.json() res.end() 비교

호두파파·2021년 8월 1일
1

Node.js

목록 보기
11/25

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()와 res.json()은 별반 다를바 없다.

  • 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를 보내는 역할을 한다. 그리고 이게 기본이라고 생각하면 된다.

기본적으로 서버에서 response 처리를 할 때 Content-type를 지정해주어야 한다.

res.send는 우리가 어떤 데이터를 보내는지 파악을 해서 이에 알맞게 Content-type을 지정해준다. 이는 Buffer, String, Object, Array일 수 있다.

res.json()

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

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

res.json()은 안에 들어있는 데이터들을 자동으로 json 형식으로 바꾸어 보내준다.

res.end()

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

profile
안녕하세요 주니어 프론트엔드 개발자 양윤성입니다.

0개의 댓글