Должен res.end() вызываться в выражении с помощью node.js?

У меня есть несколько 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();
});

Оба случая работают, но я боюсь протекать или заканчивать файловые дескрипторы или что-то в этом роде, когда я запускаю много запросов. Какой из них "более правильный"?

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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