response.setHeader和response.writeHead之间的区别?

时间:2015-01-22 16:45:53

标签: javascript node.js

在我的应用程序中,我让我的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 个答案:

答案 0 :(得分:38)

response.setHeader()只允许您设置单数标题。

response.writeHead()将允许您设置有关响应头的所有内容,包括状态代码,内容和多个标题。

考虑API:

response.setHeader(name, value)

  

为隐式标头设置单个标头值。如果这个标题   已存在于待发送标头中,其值将被替换。   如果需要发送多个标头,请在此处使用字符串数组   同名。

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"
});