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"?

Greuze
fonte
2
Achei que foi res.send()acionado res.end()- pode estar errado, embora.
tymeJV
3
@tymeJV Você tem razão, sim: github.com/visionmedia/express/blob/master/lib/response.js#L154 ;)
JayQuerie.com
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;
}
JayQuerie.com
fonte
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();
Konstantin Adamov
fonte
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().

Adiii
fonte