res.end ()와 res.send ()의 차이점은 무엇입니까?


141

저는 초보자이며이 Express.js두 키워드에 혼란을 느낍니다 : res.end()res.send().

그것들은 동일하거나 다른가?


1
나는 표현 res.endres.send
프레임 워크

답변:


130

res.send()HTTP 응답을 보냅니다. 문법은

res.send([body])

body 매개 변수는 Buffer 객체, String, 객체 또는 Array 일 수 있습니다. 예를 들면 다음과 같습니다.

res.send(new Buffer('whoop'));
res.send({ some: 'json' });
res.send('<p>some html</p>');
res.status(404).send('Sorry, we cannot find that!');
res.status(500).send({ error: 'something blew up' });

자세한 내용은 이것을 참조하십시오 .

res.end()응답 프로세스를 종료합니다. 이 방법은 실제로 노드 코어, 특히의 response.end()방법 에서 비롯됩니다 http.ServerResponse. 데이터없이 신속하게 응답을 종료하는 데 사용됩니다. 예를 들면 다음과 같습니다.

res.end();
res.status(404).end();

더 많은 정보를 원하시면 이것을 읽으십시오 .


68
그러나 res.end는 실제로 응답 본문으로 추가 할 문자열 인수를 전달할 수 있다는 점에서 res.send처럼 작동 할 수 있습니다. 또한 res.send도 응답을 종료합니다. 기능적으로 어떻게 다릅니 까?
saltthehash

31
@ psytech140 Jmar77가 좋은 반응을했다 여기에 "당신이 res.send () 문자열을 전달하면, 그것은 자동으로 HTML의 콘텐츠 형식을 가정 res.end ()하지만, 단순히에 () 구현 노드의 기본 끝 호출합니다. 응답 스트림이므로 콘텐츠 유형에 대한 가정은 없습니다. "
abagh0703

내가 결코 사용하지 않았기 때문에 이것을 순수하게 찬양해야했다. express그러나 제목 생각에서 – 하나는 무언가를 보내고, 하나는 무언가를 끝내고 ....
Darren Bartrup-Cook

그러나 res.send()아무것도 사용 하지 않으면 어떨까요? 이처럼 행동합니까 res.end()?
CMCDragonkai


108

응답 헤더와 관련하여 res.end()& 간의 주요 차이점 res.send()과 왜 중요한지에 대해 조금 더 강조하고 싶습니다 .

1. res.send ()는 출력 구조를 확인하고 그에 따라 헤더 정보를 설정합니다.


    app.get('/',(req,res)=>{
       res.send('<b>hello</b>');
    });

여기에 이미지 설명을 입력하십시오


     app.get('/',(req,res)=>{
         res.send({msg:'hello'});
     });

여기에 이미지 설명을 입력하십시오

res.end ()를 사용하면 텍스트로만 응답 할 수 있으며 " Content-Type "을 설정하지 않습니다

      app.get('/',(req,res)=>{
           res.end('<b>hello</b>');
      }); 

여기에 이미지 설명을 입력하십시오

2. res.send ()는 응답 헤더에서 "ETag"속성을 설정합니다.

      app.get('/',(req,res)=>{
            res.send('<b>hello</b>');
      });

여기에 이미지 설명을 입력하십시오

¿이 태그가 중요한 이유는 무엇입니까?
ETag HTTP 응답 헤더는 특정 버전의 리소스에 대한 식별자입니다. 웹 서버는 내용이 변경되지 않은 경우 전체 응답을 보낼 필요가 없으므로 캐시의 효율성을 높이고 대역폭을 절약 할 수 있습니다.

res.end() 이 헤더 속성을 설정하지 않습니다


4
이것은 내 의견으로는 받아 들여질 것입니다 ... 내용의 유무에 관계없이 응답을 끝내는 것에 대한 토론 대신에 당신의 작업 일을 망칠 수있는 실제 차이에 대한 더 많은 암페어가 만들어졌습니다 ...
Tomas

13

무엇 res.send (), 구현하는 것입니다 res.write , res.setHeadersres.end을 .
전송하는 데이터를 확인하고 올바른 헤더를 설정합니다.

그런 다음 res.write로 데이터를 스트리밍하고 결국 res.end를 사용하여 요청의 끝을 설정합니다.

예를 들어 파일 또는 대용량 데이터 세트를 스트리밍하려는 경우 수동으로 수행하려는 경우가 있습니다.이 경우 스트림을 유지하기 위해 헤더를 직접 설정하고 res.write를 사용하려고합니다 흐름.


0

resOutgoingMessage에서 확장되는 HttpResponse 객체입니다. HTTP 응답을 보내고 연결을 닫기 위해 OutgoingMessage에 의해 구현되는 res.send호출 res.end우리는 여기에 코드를 본다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.