С точки зрения statusCode
все они идентичны:
- Вызов
res.status(statusCode)
- Настройка
res.statusCode
свойство напрямую - Передача statusCode на
res.writeHead(statusCode, ...)
- Вызов
res.sendStatus(statusCode)
Для самого statusCode они все делают одно и то же, что устанавливает свойство .statusCode
. Это значение свойства затем используется всякий раз, когда ответ отправляет заголовки (что может быть сразу или позже, в зависимости от того, какой вариант вы выбрали). В этом можно убедиться, посмотрев исходный код Express и http (см. Ссылки ниже).
Вызов res.status()
и установка res.statusCode
, просто установите свойство для дальнейшего использования.
Вызов res.writeHead()
устанавливает свойство res.statusCode
и затем приводит к немедленной очистке заголовков, а не к их обычному поведению, помещенному в очередь для последующей отправки. Но с точки зрения statusCode нет никакой разницы.
Вызов res.sendStatus()
устанавливает свойство res.statusCode
, после чего ответ будет немедленно отправлен только с заголовками, без тела. Это часто используется для ответов, которые не нуждаются в теле (перенаправления, коды ошибок и т. Д.).
Для подобных вопросов вы можете просто посмотреть исходный код. Для .status()
мы видим this :
res.status = function status(code) {
this.statusCode = code;
return this;
};
Затем в коде nodejs для http.ServerResponse
вы можете видеть, что вызов .writeHead()
Вы сами устанавливаете то же свойство this.statusCode
перед вызовом .end()
, чтобы очистить заголовки и остальную часть ответа:
И, если вы посмотрите на документ для http.ServerResponse
,Вы видите это:
response.statusCode
Добавлено в: v0.4.0
По умолчанию: 200
При использовании неявных заголовков (без вызоваresponse.writeHead () явно), это свойство контролирует код состояния, который будет отправлен клиенту при очистке заголовков.
Итак, .status()
- это просто метод установки statusCode
свойство, к которому будет отправлено значение ответа, когда заголовки будут в конечном итоге отправлены (в будущем) и (с точки зрения statusCode) точно так же, как вызов writeHead()
и передача ему статуса.
Экспресс пытается играть на немного более высоком уровне абстракции, поэтомуони создали метод для установки statusCode
отдельно, который может быть вызван в любое время до установки ответа.