Dieser Artikel stellt Ihnen das Node.js-http-Modul vor und stellt die Methoden createServer und listen vor. Ich hoffe, er wird Ihnen hilfreich sein!
Verwenden Sie Node.js zum Erstellen von Webdiensten und verlassen Sie sich dabei hauptsächlich auf das integrierte http
-Modul. Die klassischen Frameworks express.js und koa.js sind alle in unterschiedlichem Maße mit dem http
-Modul als Kern gekapselt. http
模块。经典的 express.js、koa.js 框架都是以 http
模块为核心,进行的不同程度的封装。
创建一个最简单的 Web 服务只需要几行代码。新建一个 index.js
文件,输入以下内容:
// 1.导入 http 模块 const http = require('http'); // 2. 调用 createServer 方法创建服务 const server = http.createServer((request, response) => { // 3.响应给浏览器的内容 response.end('Hello, World'); }); // 4.执行 listen 方法,启动服务 server.listen(3000, () => { console.log('服务器启动成功:http://localhost:3000') })
然后打开命令行工具,使用 node
命令执行该文件:
node index.js
命令行工具中会打印:
服务器启动成功:http://localhost:3000
之后打开浏览器,访问 http://localhost:3000,就能看到以下内容:
到这里,只需件简简单单的 6 行代码,就创建了一个 web 服务。【相关教程推荐:nodejs视频教程、编程教学】
可以看到,创建 Web 服务的核心方法就是 createServer
方法。
它接收一个回调函数,回调参数接收两个参数,分别是 :
这个回调函数,就是处理 http 请求,设置 http 响应的主要场所。所以,编写 web 服务,其实就是在不停的在这个函数中处理请求和响应内容。这也是基于 HTTP 协议本身的请求-响应模型所决定的。当然,实际开发中肯定不能这么杂糅的写,都是使用框架,那会有很合理的中间件机制和分层。
我们都知道,TCP 协议是 HTTP 协议的底层协议,所有 HTTP 请求的数据都是利用 TCP 传输的。要发送 HTTP 请求,必须先建立 TCP 连接。
Node 中要创建 HTTP 服务也是如此。createServer
方法执行后会创建一个 Server
类的实例,该 Server
类又继承自另一个内置模块 net
中的 Server
类,它身上有一个 listen
方法。下面是相关的类型声明,可以理解这其中的关系。
// net 模块 class Server extends EventEmitter { /** * 启动服务器监听连接。此 Server 可以是 TCP 或 IPC 服务器,具体取决于它所监听的内容。 */ // 有若干重载,这是最常使用的一种方法 listen(port?: number, hostname?: string, listeningListener?: () => void): this; listen(port?: number, listeningListener?: () => void): this; } // http 模块 import { Server as NetServer } from 'node:net'; function createServer< Request extends typeof IncomingMessage = typeof IncomingMessage, Response extends typeof ServerResponse = typeof ServerResponse, >(requestListener?: RequestListener<Request, Response>): Server<Request, Response>; class Server< Request extends typeof IncomingMessage = typeof IncomingMessage, Response extends typeof ServerResponse = typeof ServerResponse, > extends NetServer {}
所以通过 createServer
方法创建了服务之后,还用再调用 listen
方法,用于启动该服务,监听连接。
它有多种重载,最常用的一种就是监听一个端口,在启动成功后,执行回调函数:
server.listen(3000, () => { console.log('服务器启动成功:http://localhost:3000') })
如果服务启动失败,比如出现端口占用时,控制台中会直接报错,就不再执行后面的回调函数了。
再介绍两种其他的重载,使用的并不多。
一种是不指定端口号,此时操作系统会随机分配一个可用的端口号。在服务启动成功后,可以通过 server.address().port
属性来获得分配的端口号:
server.listen(() => { const port = server.address().port console.log(port) console.log('服务器启动成功:http://localhost:', port) })
试一下:
一种是指定要监听的主机名。
当不指定 host
时,默认为 0.0.0.0
(IPv4)或者 ::
(IPv6),支持网络中所有的主机进行访问。
如果设置为 locolhost
或者 127.0.0.1
,则只能自己的主机访问。
server.listen(3000, 'localhost', () => { console.log('服务器启动成功:http://localhost:', port) })
我们介绍了 http
模块的基本用法,主要使用 createServer
来创建服务,再调用 listen
方法来启动服务,监听连接。createServer
接收回调函数用来具体处理某一个请求,编写 web 服务主要就是利用回调函数的两个参数 request
和 response
index.js
-Datei und geben Sie den folgenden Inhalt ein: rrreee Öffnen Sie dann das Befehlszeilentool und verwenden Sie den Befehl node
, um die Datei auszuführen: rrreee
createServer
. 🎜🎜Es empfängt eine Rückruffunktion und der Rückrufparameter empfängt zwei Parameter: 🎜createServer
ausgeführt wurde, wird eine Instanz der Klasse Server
erstellt. Die Klasse Server
erbt von einem anderen integrierten Modul net
Die Klasse Server
verfügt über eine Methode listen
. Nachfolgend finden Sie die relevanten Typdeklarationen zum Verständnis der Beziehung. 🎜rrreee🎜Nachdem Sie den Dienst über die Methode createServer
erstellt haben, rufen Sie die Methode listen
erneut auf, um den Dienst zu starten und auf Verbindungen zu warten. 🎜🎜Es gibt mehrere Überladungen. Die am häufigsten verwendete Methode ist das Abhören eines Ports. Führen Sie nach erfolgreichem Start die Rückruffunktion aus: 🎜rrreee🎜Wenn der Dienst beispielsweise nicht gestartet werden kann, wenn der Port belegt ist Der Fehler wird direkt in der Konsole gemeldet. Führen Sie dann die nachfolgende Callback-Funktion aus. 🎜🎜Wir stellen zwei weitere Überladungen vor, die nicht oft verwendet werden. 🎜🎜Eine besteht darin, keine Portnummer anzugeben. Zu diesem Zeitpunkt weist das Betriebssystem zufällig eine verfügbare Portnummer zu. Nachdem der Dienst erfolgreich gestartet wurde, können Sie die zugewiesene Portnummer über die Eigenschaft server.address().port
abrufen: 🎜rrreee🎜Probieren Sie es aus: 🎜🎜🎜🎜Eine besteht darin, den zu überwachenden Hostnamen anzugeben . 🎜🎜Wenn host
nicht angegeben ist, ist der Standardwert 0.0.0.0
(IPv4) oder ::
(IPv6), unterstützt in der Netzwerkzugriff von allen Hosts. 🎜🎜Wenn es auf locolhost
oder 127.0.0.1
eingestellt ist, kann nur Ihr eigener Host darauf zugreifen. 🎜rrreeehttp
-Moduls eingeführt, hauptsächlich mit createServer
zum Erstellen von Diensten und dann Rufen Sie die Methode listen auf, um den Dienst zu starten und auf Verbindungen zu warten. createServer
empfängt eine Rückruffunktion, um eine bestimmte Anfrage gezielt zu verarbeiten. Beim Schreiben von Webdiensten werden hauptsächlich die beiden Parameter der Rückruffunktion request
und response
verwendet. Das Folgende wird im Detail vorgestellt. 🎜🎜Weitere Informationen zu Knoten finden Sie unter: 🎜nodejs-Tutorial🎜! 🎜Das obige ist der detaillierte Inhalt vonLernen des Knoten-HTTP-Moduls: Sprechen Sie über die grundlegende Verwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!