40
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);
  1. 谁能解释一下为什么我们在 createServer 方法中调用writeHeadandend 方法。
  2. createServer 方法中传递的选项对象的主要目的是什么。
4

5 回答 5

45

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

如果将回调拆分为单独的函数,则更容易查看:

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

https.createServer(options, handleRequest).listen(8000);

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

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

于 2013-01-09T17:40:00.897 回答
20

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

JSON 对象是一个修饰符,您可以使用它options来覆盖该createServer()方法的默认行为。在您的代码的情况下:
+ key:用于 SSL 的私钥(默认为 null)
+ cert:要使用的公共 x509 证书(默认为 null)

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

于 2014-10-18T06:48:46.730 回答
4

response.writeHead(200)向请求发送响应头。状态码是 3 位 HTTP 状态码,如 404。

此方法只能在消息上调用一次,并且必须在调用 response.end() 之前调用。

如果您在调用 this 之前调用 response.write() 或 response.end(),则会计算隐式/可变标头并为您调用此函数。

于 2016-07-20T09:56:02.593 回答
3

据我所知,如果您不将 response.end() 放在最后,那么您的网页将继续加载,因此 response.end() 用于告诉服务器数据已加载

于 2017-12-03T05:18:22.937 回答
0

res.writeHead方法用于向浏览器返回一个状态码,如果是客户端状态码或服务器端状态码,浏览器会抛出错误。该res.end方法是确保响应在准备好之前不会返回,以防嵌套代码或其他情况。

该对象的目的是在声明该页面在 https 下加密之前options,确保该页面具有有效的密钥和证书。

于 2020-07-16T19:48:44.893 回答