2016-08-19 2 views
0

의 끝나기 전에 응답을 보낼 나는 같은 것을 할 싶습니다 : 첫 번째 부분에서Express.js는 익스프레스 응용 프로그램에서 실행

app.get('/some/route', someMiddleWare(), function(req, res){ 
    var status = undefined; 
    if(/*someCondition*/) status = 200; 
    else status = 403 

    res.status(status).send(''); 

    // do something else 
}) 

을 내가주는 어떤 응답 디코딩하기 위해 필요한 일을 할 , 두 번째 (send() 이후) 나는 동일한 실행 (즉, 비동기 적으로 수행 될 필요는 없지만 실제로 사용자와 관련이없는)에 추가 작업을 수행합니다. 질문은 : send() 후에 응답이 이미 사용자에게 돌아 오는 것을 확신 할 수 있습니까? 아니면 그것은 내 처리기 함수의 실행 후에 만 ​​전송됩니까? 감사합니다.

답변

0

질문 : 나는 send() 반환 후 응답 가 사용자에게 다시 그것의 방법에 이미 것을 확신 할 수 있습니까? 또는 내 처리기 함수를 실행 한 후에 만 ​​전송됩니까?

예, 데이터가 전송 중임을 확인할 수 있습니다. res.send()이라고 부르는 지점에서 데이터는 기본 TCP 인프라에 기록되며 TCP 스택까지 전송됩니다. TCP Nagle 알고리즘으로 인해 데이터를 보내기 전에 잠시 지연 될 수 있지만 Express 응용 프로그램에서는 아무 것도 기다리지 않습니다. TCP 스택이 전송을 결정하자마자 데이터가 전송됩니다.

응답을 보낸 후에 요청 처리기에서 다른 작업을 수행하는지 여부는 중요하지 않습니다.

실제 소스 코드를 따르려면 res.send(data) in express을보고 궁극적으로 res.end(data) in the http module을 호출해야합니다. 그리고 http 모듈을 보면, 호출 될 때 동시에 데이터를 TCP 구현에 쓰고 있음을 알 수 있습니다. Express에서 다른 일이 발생하기를 기다리는 마법의 지연은 없습니다.

1

예. 코드는 res.send()을 통해 데이터를 보낸 후에도 함수에서 실행됩니다.

그러나 res.send()을 사용한 후에는 해당 요청과 동일한 응답을 가진 다른 데이터를 더 이상 보낼 수 없습니다.

관련 문제