Разница между response.setHeader и response.writeHead?

В моем приложении у меня есть сервер Nodejs, который отправляет ответ JSON. Я нашел два способа сделать это, но я не уверен, каковы различия.

Один из способов -

var json = JSON.stringify(result.rows);
response.writeHead(200, {'content-type':'application/json', 'content-length':Buffer.byteLength(json)}); 
response.end(json);

И мой другой способ

var json = JSON.stringify(result.rows);
response.setHeader('Content-Type', 'application/json');
response.end(json);

Оба способа работают, и мне просто интересно, какая разница между ними и когда я должен использовать один над другим.

Ответы

Ответ 1

response.setHeader() позволяет установить только заголовок единственного.

response.writeHead() позволит вам установить почти все, что касается головы ответа, включая код состояния, контент и заголовки multiple.

Рассмотрим API:

response.setHeader(имя, значение)

Устанавливает одно значение заголовка для неявных заголовков. Если этот заголовок уже существует в заголовках, подлежащих отправке, его значение будет заменено. Используйте массив строк здесь, если вам нужно отправить несколько заголовков с помощью одно и то же имя.

var body = "hello world";
response.setHeader("Content-Length", body.length);
response.setHeader("Content-Type", "text/plain");
response.setHeader("Set-Cookie", "type=ninja");
response.status(200);

response.writeHead(statusCode, [reasonPhrase], [headers])

Отправляет ответный запрос в запрос. Код состояния представляет собой 3-значный Код состояния HTTP, например 404. Последний аргумент, заголовки, являются заголовки ответов. При желании можно дать читаемый человеком reasonPhrase как второй аргумент.

var body = "hello world";
response.writeHead(200, {
    "Content-Length": body.length,
    "Content-Type": "text/plain",
    "Set-Cookie": "type=ninja"
});