Должен ли вызываться 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 03
3
@tymeJV Вы правы, это так: github.com/visionmedia/express/blob/master/lib/response.js#L154 ;)
JayQuerie.com 03
Спасибо @ Trevor-Senior, я просматривал тот самый файл и не видел его ...
greuze
@greuze Я уже искал это раньше, так что у меня было преимущество :). Я пошел дальше и переместил комментарий в более структурированный ответ для других.
JayQuerie.com 03
Здравствуй. А что насчет res.status (<any>) .json (); И еще у меня вопрос. какой код ошибки я должен отправить обратно, если я отклоняю этот вызов? как пользователь превысил свой лимит?
9me

Ответы:

121

Ответ на ваш вопрос - нет. Вам не нужно звонить, res.end()если вы звоните res.send(). res.send()зовет res.end()вас.

Взято из /lib/response.js , вот конец res.send()функции:

  //. . .
  // respond
  this.end(head ? null : body);
  return this;
}
JayQuerie.com
источник
4
Может, мои воспоминания наконец-то улучшаются :)
tymeJV 03
8

один из примеров, когда вы должны вызвать функцию end (), - это когда вы отправляете буфер в виде файла для загрузки.

res.write(buffer);
res.end();
Константин Адамов
источник
5

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

Завершает процесс ответа. Этот метод фактически исходит из ядра Node , в частности, response.end() method of http.ServerResponse. для быстрого завершения ответа без каких-либо данных.

Если вам нужно ответить данными, вместо этого используйте такие методы, как res.send() and res.json().

Adiii
источник