Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript response.setHeader和response.writeHead之间的差异?_Javascript_Node.js - Fatal编程技术网

Javascript response.setHeader和response.writeHead之间的差异?

Javascript response.setHeader和response.writeHead之间的差异?,javascript,node.js,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.

在我的应用程序中,我让我的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);
这两种方法都有效,我只是想知道这两种方法之间有什么区别,以及何时我应该使用一种方法而不是另一种方法。

response.setHeader()
只允许设置单数

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

以NodeJS文档为例:

为隐式标头设置单个标头值。如果此标头已存在于待发送标头中,则其值将被替换。在此处使用字符串数组发送具有相同名称的多个标头

向请求发送响应头。状态代码是一个3位数的HTTP状态代码,如
404
。最后一个参数,
headers
,是响应头。也可以选择将人类可读的
statusMessage
作为第二个参数


医生?当然,我已经看过文件了。但是我对响应头的了解有限,我只想知道什么时候我应该使用一种方法而不是另一种方法。当您想设置一个头而不设置statusCode时,请使用
setHeader
,当您想设置statusCode和一组头(可选)时,请使用
writeHead
。(c) 很明显,S.O.上的人对他们的反对票太残忍了。我认为这个问题绝对没有错。这个答案引导我进一步理解它。谢谢你。正如您所看到的,这两个方法在代码中看起来几乎相同,因此引起了我的混淆。所以我只是不明白为什么我会使用setHeader而不是writeHead,如果在基本级别上,它们都在做相同的事情;无应答状态(200);在Node.js中测试v5@Bhaveshkumar我认为在文档中是有效的。
response.writeHead(200,{“内容类型”:“text/html”})
一旦使用writeHead设置了标头,则无法再次更改它。这也将覆盖由setHeader设置的标头。这里您没有提到的另一件事是,一旦调用
response.writeHead()
,标头将被发送,并且您无法再设置任何标头。而
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);
var body = "hello world";
response.writeHead(200, {
    "Content-Length": body.length,
    "Content-Type": "text/plain",
    "Set-Cookie": "type=ninja"
});