NodeJs中的response.writeHead和response.end

Kev*_*vin 28 node.js

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);
Run Code Online (Sandbox Code Playgroud)
  1. 任何人都可以解释我为什么 在createServer方法中调用writeHeadand end方法.
  2. 在createServer方法中传递的选项对象的主要用途是什么.

Fra*_*len 34

那些调用writeHeadend没有在createServer方法中完成,而是在回调中.

如果将回调拆分为单独的函数,则会更容易一些:

function handleRequest(req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

https.createServer(options, handleRequest).listen(8000);
Run Code Online (Sandbox Code Playgroud)

所以我们在这里定义一个handleRequest函数,然后将其传递给createServer调用.现在,只要我们创建的node.js服务器收到传入请求,它就会调用我们的handleRequest方法.

这种模式在JavaScript中很常见,是node.js异步事件处理的核心.

  • `writeHead`写入HTTP头(状态码200),`end`写入正文并关闭响应.你检查过API文档了吗? (5认同)
  • 为什么这样做呢.你能解释一下writeHead和end方法的目的吗? (4认同)
  • 这不是回调,而是绑定到服务器的`request`事件的侦听器。另外,http://nodejs.org/api/http.html获得了[`res.writeHead`](http://nodejs.org/api/http.html#http_response_writehead_statuscode_reasonphrase_headers)的所有答案。 `](http://nodejs.org/api/http.html#http_response_write_chunk_encoding),[`res.end`](http://nodejs.org/api/http.html#http_response_end_data_encoding)和其他[`req` ](http://nodejs.org/api/http.html#http_class_http_serverrequest)/ [`res`](http://nodejs.org/api/http.html#http_class_http_serverresponse)的东西。 (2认同)
  • 但它仍然没有回答问题。即使没有 writeHead 方法,您编写的代码仍然可以运行。你能解释一下为什么吗?谢谢 (2认同)

Gui*_*ura 13

在您的代码中,writeHead()调用它来编写响应的标头,应用程序将为客户端提供该标头.该end()方法都将响应的内容发送给客户端,并向服务器发出已完全发送响应(标题和内容)的信号.如果您仍然要发送任何其他内容,则应该调用响应对象的write()方法res.

optionsJSON对象是,你可以使用,覆盖的默认行为的修饰createServer()方法.在您的代码中:
+ key:用于SSL的私钥(默认为null)
+ cert:要使用的公共x509证书(默认为null)

您可以在Node.js API文档的此部分中找到有关该response.writeHead()方法的更多信息.
您可以在Node.js API文档的此部分中找到有关该https.createServer()方法的更多信息.

  • @DunDev由于您从未告诉服务器发送消息,因此大概该消息从未发送。消息从未发送后到底会发生什么取决于多种因素,包括是否设置了超时(因此,如果消息长时间未回复,则会自动出错)以及客户端指定的选项。 (2认同)