Maison > interface Web > js tutoriel > Apprentissage du module http du noeud : parler de l'utilisation de base

Apprentissage du module http du noeud : parler de l'utilisation de base

青灯夜游
Libérer: 2023-02-03 18:32:48
avant
2334 Les gens l'ont consulté

Cet article vous présentera le module http Node.js et présentera les méthodes createServer et Listen. J'espère qu'il vous sera utile !

Apprentissage du module http du noeud : parler de l'utilisation de base

Module http

Utilisez Node.js pour créer des services Web, en vous appuyant principalement sur le module http intégré. Les frameworks classiques express.js et koa.js sont tous encapsulés à des degrés divers avec le module http comme noyau. 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')
})
Copier après la connexion

然后打开命令行工具,使用 node 命令执行该文件:

node index.js
Copier après la connexion

命令行工具中会打印:

服务器启动成功:http://localhost:3000
Copier après la connexion

之后打开浏览器,访问 http://localhost:3000,就能看到以下内容:

Apprentissage du module http du noeud : parler de lutilisation de base

到这里,只需件简简单单的 6 行代码,就创建了一个 web 服务。【相关教程推荐:nodejs视频教程编程教学

createServer 方法

可以看到,创建 Web 服务的核心方法就是 createServer 方法。

它接收一个回调函数,回调参数接收两个参数,分别是 :

  • request 对象:表示 HTTP 请求对象,里面包含了客户端本次请求携带的信息
  • response 对象:表示 HTTP 响应对象,用于向客户端设置响应的信息

这个回调函数,就是处理 http 请求,设置 http 响应的主要场所。所以,编写 web 服务,其实就是在不停的在这个函数中处理请求和响应内容。这也是基于 HTTP 协议本身的请求-响应模型所决定的。当然,实际开发中肯定不能这么杂糅的写,都是使用框架,那会有很合理的中间件机制和分层。

listen 方法

我们都知道,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 {}
Copier après la connexion

所以通过 createServer 方法创建了服务之后,还用再调用 listen 方法,用于启动该服务,监听连接

它有多种重载,最常用的一种就是监听一个端口,在启动成功后,执行回调函数:

server.listen(3000, () => {
    console.log(&#39;服务器启动成功:http://localhost:3000&#39;)
})
Copier après la connexion

如果服务启动失败,比如出现端口占用时,控制台中会直接报错,就不再执行后面的回调函数了。

再介绍两种其他的重载,使用的并不多。

一种是不指定端口号,此时操作系统会随机分配一个可用的端口号。在服务启动成功后,可以通过 server.address().port 属性来获得分配的端口号:

server.listen(() => {
    const port = server.address().port
    console.log(port)
    console.log(&#39;服务器启动成功:http://localhost:&#39;, port)
})
Copier après la connexion

试一下:

Apprentissage du module http du noeud : parler de lutilisation de base

一种是指定要监听的主机名

当不指定 host 时,默认为 0.0.0.0(IPv4)或者 ::(IPv6),支持网络中所有的主机进行访问

如果设置为 locolhost 或者 127.0.0.1,则只能自己的主机访问。

server.listen(3000, &#39;localhost&#39;, () => {
    console.log(&#39;服务器启动成功:http://localhost:&#39;, port)
})
Copier après la connexion

总结

我们介绍了 http 模块的基本用法,主要使用 createServer 来创建服务,再调用 listen 方法来启动服务,监听连接。createServer 接收回调函数用来具体处理某一个请求,编写 web 服务主要就是利用回调函数的两个参数 requestresponse

Créer le service Web le plus simple ne nécessite que quelques lignes de code. Créez un nouveau fichier index.js et saisissez le contenu suivant :

rrreee Ouvrez ensuite l'outil de ligne de commande et utilisez la commande node pour exécuter le fichier : rrreee

Le l'outil de ligne de commande imprimera :🎜rrreee🎜Ouvrez le navigateur et visitez http://localhost:3000, vous verrez le contenu suivant :🎜🎜Apprentissage du module http du noeud : parler de lutilisation de base🎜🎜À ce stade, vous n'avez besoin que de 6 lignes de code simples pour créer un service Web. [Tutoriels associés recommandés : tutoriel vidéo nodejs🎜, Enseignement de la programmation🎜]🎜

méthode createServer

🎜Vous pouvez voir que la création d'un Web La méthode principale du service est la méthode createServer. 🎜🎜Il reçoit une fonction de rappel, et le paramètre de rappel reçoit deux paramètres, qui sont : 🎜
  • objet de requête : représente l'objet de requête HTTP, qui contient les informations portées par le client dans cette requête
  • objet de réponse : représente l'objet de réponse HTTP, utilisé pour définir les informations de réponse au client
🎜Cette fonction de rappel consiste à traiter http requêtes. L'endroit principal pour définir les réponses http. Par conséquent, l’écriture d’un service Web consiste en fait à traiter en permanence le contenu de la demande et de la réponse dans cette fonction. Ceci est également déterminé par le modèle de demande-réponse du protocole HTTP lui-même. Bien sûr, dans le développement réel, nous ne pouvons certainement pas écrire de manière aussi mixte. Nous utilisons tous des frameworks, qui auront des mécanismes middleware et une superposition très raisonnables. 🎜

méthode d'écoute

🎜Nous savons tous que le protocole TCP est le protocole sous-jacent du protocole HTTP et que toutes les données de requête HTTP sont transmises via TCP. Pour envoyer une requête HTTP, une connexion TCP doit d'abord être établie. 🎜🎜Il en va de même pour la création de services HTTP dans Node. Une fois la méthode createServer exécutée, une instance de la classe Server sera créée. La classe Server hérite d'un autre module intégré net La classe <code>Server a une méthode listen. Vous trouverez ci-dessous les déclarations de type pertinentes pour comprendre la relation. 🎜rrreee🎜Ainsi, après avoir créé le service via la méthode createServer, appelez à nouveau la méthode listen pour démarrer le service et écouter les connexions. 🎜🎜Il a plusieurs surcharges. La plus couramment utilisée est d'écouter un port. Une fois le démarrage réussi, exécutez la fonction de rappel : 🎜rrreee🎜Si le service ne démarre pas, par exemple lorsque le port est occupé, un. l'erreur sera signalée directement dans la console. Exécutez ensuite la fonction de rappel suivante. 🎜🎜Présentation de deux autres surcharges, qui ne servent pas beaucoup. 🎜🎜La première consiste à ne pas spécifier de numéro de port. À ce stade, le système d'exploitation attribuera de manière aléatoire un numéro de port disponible. Une fois le service démarré avec succès, vous pouvez obtenir le numéro de port attribué via la propriété server.address().port : 🎜rrreee🎜Essayez-le : 🎜🎜Apprentissage du module http du noeud : parler de lutilisation de base🎜🎜La première consiste à spécifier le nom d'hôte à surveiller . 🎜🎜Lorsque hôte n'est pas spécifié, la valeur par défaut est 0.0.0.0 (IPv4) ou :: (IPv6), pris en charge dans l'accès au réseau depuis tous les hôtes. 🎜🎜S'il est défini sur locolhost ou 127.0.0.1, il n'est accessible que par votre propre hôte. 🎜rrreee

Résumé🎜🎜Nous avons introduit l'utilisation de base du module http, en utilisant principalement createServer pour créer des services, puis appeler la méthode listen pour démarrer le service et écouter les connexions. createServer reçoit une fonction de rappel pour traiter spécifiquement une certaine requête. L'écriture de services Web utilise principalement les deux paramètres de la fonction de rappel, request et response. Ce qui suit sera présenté en détail. 🎜🎜Pour plus de connaissances sur les nœuds, veuillez visiter : 🎜tutoriel Nodejs🎜 ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal