Deve res.end () ser chamado expressamente com node.js?


89

Tenho vários aplicativos Express e vejo que em alguns módulos, res.end()é chamado no final de um manipulador de solicitação (após res.sendou res.json), enquanto em outros, não é chamado.

Por exemplo:

app.get('/test', function(req, res) {
    res.send('Test', 200);
});

ou:

app.get('/test', function(req, res) {
    res.send('Test', 200);
    res.end();
});

Ambos os casos funcionam, mas tenho medo de vazamentos ou esgotamento dos descritores de arquivo ou algo assim, quando executo muitas solicitações. Qual é o "mais correto"?


2
Achei que foi res.send()acionado res.end()- pode estar errado, embora.
tymeJV


Obrigado @Tevor-Senior, estava procurando nesse mesmo arquivo e não o vi ...
greuze

@greuze Já pesquisei antes, por isso tive uma vantagem :). Fui em frente e movi o comentário para uma resposta mais estruturada para os outros.
JayQuerie.com

Oi. E quanto a res.status (<qualquer>) .json (); E eu também tenho outra pergunta. qual código de erro devo enviar de volta se estiver rejeitando a chamada? como o usuário excedeu seu limite?
9me

Respostas:


120

A resposta a sua pergunta é não. Você não precisa ligar res.end()se ligar res.send(). res.send()chamadas res.end()para você.

Retirado de /lib/response.js , aqui está o final da res.send()função:

  //. . .
  // respond
  this.end(head ? null : body);
  return this;
}

4
Talvez minhas memórias finalmente
estejam

8

um exemplo em que você deve chamar a função end () é quando você envia um buffer como um arquivo para download.

res.write(buffer);
res.end();

5

res.end([data] [, encoding])

Termina o processo de resposta. Na verdade, esse método vem do núcleo do , especificamente o response.end() method of http.ServerResponse. Use para encerrar rapidamente a resposta sem nenhum dado.

Se você precisar responder com dados, use métodos como res.send() and res.json().

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.