Res.end () deve essere chiamato in express con node.js?


89

Ho diverse applicazioni Express e vedo che in alcuni moduli res.end()viene chiamato alla fine di un gestore di richieste (dopo res.sendo res.json), mentre in altri non viene chiamato.

Per esempio:

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

o:

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

Entrambi i casi funzionano, ma ho paura delle perdite o dell'esaurimento dei descrittori di file o qualcosa del genere, quando eseguo molte richieste. Quale è "più corretto"?


2
Ho pensato res.send()innescato res.end()- potrebbe essere sbagliato comunque
tymeJV


Grazie @ Trevor-Senior, lo stavo cercando nello stesso file e non l'ho visto ...
greuze

@greuze L'ho cercato prima, quindi ho avuto un vantaggio :). Sono andato avanti e ho spostato il commento in una risposta più strutturata per gli altri.
JayQuerie.com

Ciao. E che dire di res.status (<any>) .json (); E ho anche un'altra domanda. quale codice di errore devo restituire se rifiuto la chiamata? come l'utente ha superato il suo limite?
9me

Risposte:


121

La risposta alla tua domanda è no. Non devi chiamare res.end()se chiami res.send(). res.send()ti chiama res.end().

Tratto da /lib/response.js , ecco la fine della res.send()funzione:

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

4
Forse i miei ricordi finalmente stanno migliorando :)
tymeJV

8

un esempio in cui è necessario chiamare la funzione end () è quando si invia un buffer come file da scaricare.

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

5

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

Termina il processo di risposta. Questo metodo in realtà proviene dal core del nodo , in particolare response.end() method of http.ServerResponse. dall'uso per terminare rapidamente la risposta senza dati.

Se hai bisogno di rispondere con i dati, usa invece metodi come res.send() and res.json().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.