Потрібно res.end () викликати експрес із node.js?


89

У мене є кілька програм Express , і я бачу, що в деяких модулях res.end()це викликається в кінці обробника запиту (після res.sendабо res.json), тоді як в інших це не викликається.

Наприклад:

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

або:

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

Обидва випадки працюють, але я боюся про витоки або закінчення дескрипторів файлів чи щось подібне, коли я запускаю багато запитів. Який з них "правильніший"?


2
Я думав, res.send()спрацьовує res.end()- може бути неправильно.
tymeJV

3
@tymeJV Ви маєте рацію, це так: github.com/visionmedia/express/blob/master/lib/response.js#L154 ;)
JayQuerie.com

Дякую @ Trevor-Senior, я шукав той самий файл і не бачив його ...
greuze

@greuze Я це вже шукав, тому мав фору :). Я продовжив і переклав коментар на більш структуровану відповідь для інших.
JayQuerie.com

Привіт. А як щодо res.status (<any>) .json (); І в мене є ще одне запитання. який код помилки слід надіслати назад, якщо я відхиляю цей дзвінок? як користувач перевищив свою межу?
вересня

Відповіді:


120

Відповідь на ваше запитання - ні. Вам не потрібно телефонувати, res.end()якщо ви телефонуєте res.send(). res.send()дзвонить res.end()вам.

Взято з /lib/response.js , ось кінець res.send()функції:

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

4
Можливо, мої спогади нарешті покращуються :)
tymeJV

8

одним із прикладів, коли потрібно викликати функцію end (), є надсилання буфера як файлу для завантаження.

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

5

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

Завершує процес відповіді. Цей метод насправді походить від ядра Node , зокрема response.end() method of http.ServerResponse. використання, щоб швидко закінчити відповідь без будь-яких даних.

Якщо вам потрібно відповісти даними, замість цього використовуйте такі методи, як res.send() and res.json().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.