构建一个Node.js HTTP服务器
上一篇文章介绍了最基本的Node.js程序。虽然“Hello World”程序很好,但Node.js更常用于创建高度可扩展的服务器应用程序。本文介绍一个基于Node.js构建的简单HTTP服务器。
关键要点
require()
方法(加载模块)和http
模块的createServer()
方法(创建服务器并为每个新请求执行回调函数)之上。回调函数使用两个参数(请求和响应)来处理客户端请求并返回数据。response.writeHead()
方法将HTTP状态代码和响应头发送回客户端,使用response.write()
写入HTML页面,并使用response.end()
结束响应。服务器使用listen()
方法侦听传入连接。目前,服务器只能返回单个HTML页面,未来的增强功能可能包括从文件系统读取网页和整合HTTP身份验证。运行服务器
首先,创建一个名为“web_server.js”的新文件。将以下代码插入文件并保存:
var http = require("http"); var server = http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/html"}); response.write("<!DOCTYPE html>"); response.write("<html>"); response.write("<head>"); response.write("<title>Hello World Page</title>"); response.write("</head>"); response.write("<body>"); response.write("Hello World!"); response.write("</body>"); response.write("</html>"); response.end(); }); server.listen(80); console.log("Server is listening");
要启动服务器,请键入以下命令。如果一切正常,您将看到一条消息,表明服务器正在监听。请注意,示例服务器尝试绑定到端口80(标准HTTP端口)。如果此端口已被使用或在您的机器上受到限制,您将遇到错误。
node web_server.js
下一步是使用Web浏览器连接到服务器。启动您选择的浏览器,并将其定向到以下任一链接。在网络术语中,localhost(及其IP地址127.0.0.1)指的是您当前使用的机器。您的浏览器应该显示“Hello World!”。
<code>http://localhost http://127.0.0.1</code>
服务器的工作原理
现在服务器已启动并运行,是时候分析代码了。首先要注意的是第1行的require()
调用。Node.js提供了一个简单的模块系统,拥有庞大的开发者社区。Node.js程序可以使用require()
方法加载单个模块。虽然许多模块必须下载,但有些模块(例如http
)包含在Node.js安装中。在第2行,使用http
模块的createServer()
方法创建HTTP服务器。与大多数Node.js函数一样,createServer()
将回调函数作为参数。每次服务器接收到新请求时,都会执行此回调函数。回调函数接受两个参数:请求和响应。请求对象包含有关客户端请求的信息,例如URL、HTTP头等等。类似地,响应对象用于将数据返回给客户端。回调函数首先调用response.writeHead()
方法。此方法将HTTP状态代码和一组响应头发送回客户端。状态代码用于指示请求的结果。例如,每个人以前都遇到过404错误,表示找不到页面。示例服务器返回代码200,表示成功。除了状态代码外,服务器还会返回许多HTTP头,这些头定义了响应的参数。如果您未指定头,Node.js将隐式地为您发送它们。示例服务器仅指定Content-Type
头。此特定头定义了响应的MIME类型。对于HTML响应,MIME类型为“text/html”。接下来,服务器执行对response.write()
的几次调用。这些调用用于写入HTML页面。默认情况下,使用UTF-8字符编码。从技术上讲,所有这些调用都可以组合成单个调用以提高性能。但是,对于这样一个简单的示例,为了代码的可读性,牺牲了性能。写入HTML页面后,将调用response.end()
方法。通过调用此方法,我们告诉服务器响应头和正文已发送,并且请求已完成。示例服务器在没有参数的情况下调用end()
。但是,如果只需要一次调用,end()
也可以像write()
一样调用。第15行的listen()
调用使服务器绑定到端口并侦听传入连接。计算机有数千个端口,充当通信端点。为了连接到服务器,客户端必须确切知道服务器正在侦听哪个端口。端口由端口号标识,HTTP服务器通常侦听端口80。
结论
本文介绍了一个非常基本的HTTP服务器。在其当前状态下,服务器只能返回单个HTML页面。在接下来的几周内,我们将深入探讨Node.js的世界,探索其他功能,例如从文件系统读取网页和整合HTTP身份验证。
Node.js创建HTTP服务器的常见问题解答(FAQ)
http.createServer()
方法是Node.js中用于创建HTTP服务器新实例的内置函数。此服务器侦听传入请求并发送响应。它将一个requestListener
函数作为参数,该函数会自动添加到“request”事件。每次服务器收到请求时,都会调用此函数。requestListener
函数有两个参数:request
(http.IncomingMessage
的实例)和response
(http.ServerResponse
的实例)。
response.writeHead()
方法是Node.js中用于向请求发送响应头的函数。该方法接受两个参数:状态代码和表示响应头的普通对象。状态代码是3位HTTP状态代码,第二个参数是一个对象,其中每个键值对表示一个头名称及其值。此方法必须在response.end()
之前调用,并且每个响应只能调用一次。
Node.js中的write
和writeHead
方法都用于发送服务器响应的过程。writeHead
方法用于发送HTTP状态代码和一组响应头,而write
方法用于向客户端发送响应正文。writeHead
方法应该在write
之前调用,两者都应该在end
之前调用,end
向服务器发出信号,表明所有响应头和正文都已发送。
node-http-server
是Node.js的一个简单易配置的HTTP或HTTPS服务器。要使用它,您首先需要使用npm(Node包管理器)通过运行npm install node-http-server
来安装它。安装后,您可以在Node.js文件中引入它,并使用其deploy
方法启动服务器。deploy
方法将配置对象作为参数,您可以在其中指定服务器选项,例如端口、根和serverIndex。
在Node.js中,您可以使用http
模块处理HTTP请求和响应。首先,您需要使用http.createServer()
方法创建一个HTTP服务器。此方法将回调函数作为参数,每次服务器收到请求时都会执行该函数。回调函数有两个参数:request
和response
。request
对象可用于获取有关客户端请求的信息,例如URL、HTTP头和有效负载。response
对象用于向客户端发送响应。您可以使用response.writeHead()
方法设置HTTP状态代码和头,使用response.write()
方法编写响应正文,并使用response.end()
方法结束响应。
以上是在Node.js中创建HTTP服务器的详细内容。更多信息请关注PHP中文网其他相关文章!