Maison  >  Article  >  développement back-end  >  Fonction de rappel en js pour implémenter un serveur http

Fonction de rappel en js pour implémenter un serveur http

不言
不言original
2018-07-25 10:30:211840parcourir

Le contenu partagé avec vous dans cet article concerne la fonction de rappel dans js pour implémenter un serveur http. Le contenu est très détaillé. Examinons ensuite le contenu spécifique. J'espère que cela pourra aider tout le monde.

Opérations réseau

Utilisez d'abord le module http pour implémenter un serveur http

var http = require('http');    // 使用http模块

http.createServer (
        function (request, response) {
            response.writeHead(200, {'Content-Type': 'text-plain'});    // http响应头部
            response.end('hello word\n');    // 返回的内容
        }
    ).listen(8124);    // 监听8124端口
PS C:\Users\mingm\Desktop\test> node main.js

Visitez http :/ /127.0.0.1:8124/ Retourner le mot bonjour

Certaines API

module http

Deux façons,

  1. Lorsqu'il est utilisé comme serveur, créez un serveur http, écoutez les requêtes des clients http et renvoyez les réponses.

  2. Lorsqu'il est utilisé en tant que client, lancez une requête client http pour obtenir une réponse du serveur

Le côté serveur est piloté par les événements Oui, la fonction de rappel lors de la création du serveur sera appelée une fois, c'est-à-dire qu'elle est basée sur les événements

En-tête de requête http

L'essence de la requête http est un flux de données, composé d'un en-tête de requête et corps de la demande.
Ouvrez les outils de développement du navigateur, sélectionnez le panneau réseau, puis actualisez la page, sélectionnez à nouveau un fichier et dans la fenêtre des en-têtes, les informations d'en-tête http de la demande de fichier en cours s'affichent

D'abord la demande en-tête , suivi du corps de la requête
Lorsqu'une requête http est envoyée au serveur, elle est envoyée dans un flux de données d'un octet du début à la fin. Après avoir reçu l'en-tête complet de la requête, le serveur http créé par le module http exécute. une fonction de rappel,

var http = require('http');    // 使用http模块

http.createServer (
        function (request, response) {
            var body = [];

            console.log(request.method);
            console.log("--------------");
            console.log(request.headers);
            console.log("---------------");
        }
    ).listen(8124);    // 监听8124端口
PS C:\Users\mingm\Desktop\test> node main.js
GET
--------------
{ host: '127.0.0.1:8124',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  'upgrade-insecure-requests': '1',
  dnt: '1',
  'user-agent':
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
  accept:
   'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'zh-CN,zh;q=0.9' }
---------------

Fonction de rappel

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
    console.log("3333");
    console.log(err);
    console.log(data.toString());
    console.log("3333");
});

console.log("程序执行结束!");
PS C:\Users\mingm\Desktop\test> node main.js
程序执行结束!
3333
null
33333333333333333333333333
3333
PS C:\Users\mingm\Desktop\test>

Lorsque vous rencontrez une opération d'E/S, sautez d'abord l'exécution et exécutez le contenu actuel. Le résultat est donc le suivant, puis le résultat de l'exécution est transmis à la dernière fonction de la liste des paramètres, donc la dernière fonction est la fonction de rappel de

http, demandant le résultat de l'exécution de

var http = require('http');

http.createServer(
    function (request, response) {
        var body = [];

        console.log(request.method);
        console.log(request.headers);

    console.log(1111111111);
    console.log(body);

       request.on('end', function () {
        body = Buffer.concat(body);
        console.log(222222222222222);
        console.log(body.toString());
    });

    console.log(4444444444444);
    response.writeHead(200, {'Content-Type': 'text-plain'});
    response.end('hello word\n');
    console.log(55555555555);
    }
).listen(8124);

PS C:\Users\mingm\Desktop\test> node main.js
GET
{ host: '127.0.0.1:8124',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  'upgrade-insecure-requests': '1',
  'user-agent':
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
  dnt: '1',
  accept:
   'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'zh-CN,zh;q=0.9' }
1111111111
[]
4444444444444
55555555555
222222222222222

GET
{ host: '127.0.0.1:8124',
  connection: 'keep-alive',
  pragma: 'no-cache',
  'cache-control': 'no-cache',
  'user-agent':
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
  dnt: '1',
  accept: 'image/webp,image/apng,image/*,*/*;q=0.8',
  referer: 'http://127.0.0.1:8124/',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'zh-CN,zh;q=0.9' }
1111111111
[]
4444444444444
55555555555
222222222222222

Cette exécution est asynchrone. Elle est exécutée en premier sur

console.log(body);

Puisque request.on doit attendre le retour, l'instruction suivante

console.log(444);
est exécuté de manière asynchrone. Renvoyez ensuite le contenu, exécutez à nouveau request.on, notifiez le résultat au dernier paramètre de la fonction, puis terminez l'exécution.

Réponse http

Le serveur renvoie le corps de la requête demandé par le client au client tel quel

PS C:\Users\mingm\Desktop\test> node main.js
444444444444
22222222
33333333
555555
var http = require("http");

http.createServer(function (request, response){
    console.log(444444444444);
    response.writeHead(200, { 'Content-Type': 'text/plain' });

                    // 为响应头,即原路发送给客户端
                    request.on(
                        "data", 
                        function (chunk) {
                            response.write(chunk);
                            console.log(111111);
                    });

                    console.log(22222222);
                    request.on('end', function() {response.end();console.log(555555)});
                    console.log(33333333);
                }
).listen(8124);
L'écriture est un peu brouillonne

client http

le nœud envoie une requête client http

var options = {
    hostname: 'www.iming.info',
    port: 80,    // 端口为80
    path: '/upload',    // 请求的路径
    method: 'POST',        // 请求的方法为post方法
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'    // 头部信息
    },
}

var http = require('http');

var request = http.request(options, function (response) {});

request.write('hello word!');
request.end();
Ce qui précède envoie une requête http.

Recommandations associées :

analyse du code source axios comment implémenter une bibliothèque de requêtes HTTP

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!

Déclaration:
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