收集操纵 回调函数 http

收集操纵

起首运用http模块完成一个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

接见http://127.0.0.1:8124/ 返回hello word

一些api

http模块

两种体式格局,

  1. 作为服务器端运用的时,建立一个http服务器,监听http客户端要求,并返回相应。
  2. 作为客户端运用的时刻,提议http客户端要求,用来取得服务器端的相应

服务器端的是以事宜作为驱动的,建立服务器时的回调函数就会被挪用一次,即,这是事宜驱动

http要求头

http的要求实质是数据流,由要求头和要求体构成。
翻开浏览器的开发者东西,挑选network面板,然后,革新页面,再次,挑选一个文件,在headers窗口中,显示出当前文件要求的http头部信息
<img src=”https://melovemingming-125387…;>
一样,火狐的也一样
<img src=”https://melovemingming-125387…;>
先是要求头,后是要求体
http要求发送给服务器时,是从头至尾一个一个字节以数据流的体式格局发送,http模块建立的http服务器在接收到完全的要求头今后,举行回调函数,

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' }
---------------

回调函数

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>

当碰到须要i/o操纵的时刻,先跳过实行,在实行当前的内容。所以效果为此,然后在将实行完成的效果传给参数列表的末了一个函数,所以末了一个函数为回调

http的回调函数,要求

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

此实行动异步实行,先实行到

console.log(body);

因为request.on须要守候返回,所以异步实行下方的语句

console.log(444);

接着返回内容,再实行request.on,将效果关照回到函数的末了一个参数,然后实行终了。

http相应

服务端原样将客户端要求的要求体,返回给客户端

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);

写的有点乱

http客户端

node发送一个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();

以上发送了一个http要求。
下面是node.js的事宜轮回
貌似邃晓一点api的原理了。

    原文作者:小小____
    原文地址: https://segmentfault.com/a/1190000015755079
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞