📜  Node.js response.writeHead() 方法

📅  最后修改于: 2022-05-13 01:56:55.985000             🧑  作者: Mango

Node.js response.writeHead() 方法

response.writeHead() (在 v1..0 中添加)属性是“http”模块的内置属性,它向请求发送响应标头。状态码是 3 位HTTP状态码,如 404。最后一个参数 headers 是响应头。可选地,可以将人类可读的statusMessage作为第二个参数。

当使用response.setHeader()设置了 headers 时,它们将与传递给 response.writeHead() 的任何 headers 合并,并且传递给response.writeHead ()的 headers 具有优先级。如果调用了这个方法并且没有调用response.setHeader() ,它会直接将提供的 header 值写入网络通道,而不在内部缓存,并且 header 上的response.getHeader()不会产生预期的结果。如果希望在未来检索和修改标头的渐进式填充,请改用response.setHeader()

为了得到响应和正确的结果,我们需要导入' http '模块。

进口:

const http = require('http');

句法:

response.writeHead(statusCode[, statusMessage][, headers]);

参数:它接受上面提到的三个参数,如下所述:

  • statusCode < number > 接受数字类型的状态码。
  • statusMessage < 字符串 > 它接受任何显示状态消息的字符串。
  • headers < Object > 它接受任何函数、数组或字符串。

Return Value < http.ServerResponse > 它返回对ServerResponse的引用,以便可以链接调用。

下面的示例说明了在 Node.js 中response.writeHead()属性的使用。

示例 1:文件名:index.js

// Node.js program to demonstrate the 
// response.writeHead() Method
  
// Importing http module
var http = require('http');
  
// Setting up PORT
const PORT = process.env.PORT || 3000;
  
// Creating http Server
var httpServer = http.createServer(
        function(request, response){
  
  const body = 'hello world';
    
  // Calling response.writeHead method
  response.writeHead(200, {
    'Content-Length': Buffer.byteLength(body),
    'Content-Type': 'text/plain'
  });
    
  response.end(body);
});
  
// Listening to http Server
httpServer.listen(PORT, () => {
   console.log("Server is running at port 3000...");
});

输出:

现在在浏览器中运行http://localhost:3000/

示例 2:文件名:index.js

// Node.js program to demonstrate the 
// response.writeHead() Method
  
// Importing http module
var http = require('http');
  
// Setting up PORT
const PORT = process.env.PORT || 3000;
  
// Creating http Server
var httpServer = http.createServer(
        function(request, response){
  
  // Setting up Headers  
  response.setHeader('Content-Type', 'text/html');
  response.setHeader('Set-Cookie', ['type=ninja', 
  'language=javascript']);
  response.setHeader('X-Foo', 'bar');
  
  // Calling response.writeHead method
  response.writeHead(200, 
     { 'Content-Type': 'text/plain' });
  
  // Getting the set Headers
  const headers = response.getHeaders();
    
  // Printing those headers
  console.log(headers);
  
  // Prints Output on the 
  // browser in response
  response.end('ok');
});
  
// Listening to http Server
httpServer.listen(PORT, () => {
   console.log(
"Server is running at port 3000...");
});

使用以下命令运行index.js文件:

node index.js

输出:

现在在浏览器中运行http://localhost:3000/

Content-Length以字节为单位,而不是字符。使用Buffer.byteLength()确定正文的长度(以字节为单位)。 Node.js 不会检查 Content-Length 和已传输的正文长度是否相等。尝试设置包含无效字符的标头字段名称或值将导致抛出 TypeError。

参考: https://nodejs.org/api/http.html#http_response_writehead_statuscode_statusmessage_headers