Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

JS Dev Blog

res.json() , res.end() , res.send() 본문

Development/Server

res.json() , res.end() , res.send()

chacot 2022. 4. 29. 19:37

express를 사용해서 reqeust, response를 주고 받을 때

res.json(), res.end(), res.end() 중 어떤 것을 써야하는지 가끔 헷갈릴 때가 있다.

 

res.send()

res.send()는 response 처리할 때 Content-type을 알맞게 지정해준다. 이는 Buffer, String, Object, Array 일 수 있다.

 

res.json()

서버와 클라이언트간 데이터를 주고 받을 때 보통 RESTful API 형태로 주고 받는다. 이때 주고 받는 데이터 형식은 json 포맷일 확률이 높다. res.json()은 안에 들어있는 데이터들을 자동으로 json 형식으로 바꾸어 준다.

즉 content-type 헤더를 application/JSON으로 고정한다. 결국 res.json()도 res.send()를 보내준다. res.send()보다 더 작은 범위라고 생각하면 좋다.

 

res.end()

res.end()는 보내줄 데이터가 없는데 response를 끝내고 싶을 때 사용한다.

 

 

 

의문점

Logout 성공시'Logged out Successfully'라는 메시지를 response로 돌려주게끔 하는 코드를 작성했다.

module.exports = (req, res) => {
  
  res.status(205).end('Logged out successfully') // 테스트 케이스 PASS
  //res.status(205).send('Logged out successfully') // 테스트 케이스 FAIL. 이 코드가 맞는 것 같은데 왜 FAIL인지 모르겠음.
};

이를 테스트 하는 코드는 다음과 같다

    describe('🚩 POST /signout', () => {
      it('🧩 로그아웃 요청시 205 상태코드로 응답해야 합니다.', async () => {
        const response = await agent.post('/signout');
        expect(response.status).to.eql(205);
        expect(response.text).to.eql('Logged out successfully');
      });
    });

 

아무리 봐도 res.send()를 쓰는 것이 맞아보이는데 res.send()를 쓸 경우 아래와 같은 에러를 띄우면서 테스트케이스 Pass가 안된다. 마치 아무런 텍스트 메시지도 반환하지 못하는 것처럼 보인다.

      

AssertionError: expected '' to deeply equal 'Logged out successfully'

 

 res.end()를 쓸 경우 메시지가 정상출력되며 테스트케이스가 통과된다. 이유는 ... 모르겠다.

 

*21.5.1 추가

 

원인을 찾았다. express버전이 업데이트 되면서 status code가 205일 때 res.send()에 메시지를 전송하지 않도록 변경되었다. 원인으 찾았지만 여전히 res.end()를 쓸 때 테스트가 통과되는 이유는 모르겠다.

 

Release Change Log

4.18.0 - Release date: 2022-04-25

 

  • The res.send() method will not attempt to send a response body when the response code is set to 205.

 

https://expressjs.com/en/changelog/4x.html

 

Express 4.x changelog

Release Change Log 4.18.0 - Release date: 2022-04-25 The 4.18.0 minor release includes bug fixes and some new features, including: The app.get() method and the app.set() method now ignores properties directly on Object.prototype when getting a setting valu

expressjs.com

 

'Development > Server' 카테고리의 다른 글

서버 인증  (0) 2022.04.23
Express.js  (0) 2022.04.18