Home  >  Article  >  Backend Development  >  Callback function in js to implement an http server

Callback function in js to implement an http server

不言
不言Original
2018-07-25 10:30:211851browse

The content shared with you in this article is about implementing an http server with callback function in js. The content is very detailed. Next, let’s take a look at the specific content. I hope it can help everyone.

Network operation

First use the http module to implement an http server

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端口
rrree

Access http://127.0.0.1: 8124/ Return hello word

Some api

http module

Two ways,

  1. When used as a server, create an http server, listen to http client requests, and return responses.

  2. When used as a client, initiate an http client request to obtain a response from the server

The server is event-driven Yes, the callback function when creating the server will be called once, that is, this is event-driven

http request header

The essence of http request is a data stream, consisting of a request header and a request body .
Open the browser's developer tools, select the network panel, then refresh the page, select a file again, and in the headers window, display the http header information of the current file request

First the request header , followed by the request body
When an http request is sent to the server, it is sent in a data stream one byte from beginning to end. The http server created by the http module performs a callback function after receiving the complete request header,

PS C:\Users\mingm\Desktop\test> node main.js
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端口

Callback function

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("程序执行结束!");

When encountering an i/o operation, skip execution first and execute the current content. So the result is this, and then the completed execution result is passed to the last function in the parameter list, so the last function is the callback function of callback

http, requesting

PS C:\Users\mingm\Desktop\test> node main.js
程序执行结束!
3333
null
33333333333333333333333333
3333
PS C:\Users\mingm\Desktop\test>

execution result

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

This execution is asynchronous. It is executed first to

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

Since request.on needs to wait for the return, the following statement is asynchronously executed.

console.log(body);

Then the content is returned, and then request is executed. on, notify the result back to the last parameter of the function, and then complete the execution.

http response

The server returns the request body requested by the client to the client as it is

console.log(444);
rrree

The writing is a bit messy

http client

node sends an http client request

PS C:\Users\mingm\Desktop\test> node main.js
444444444444
22222222
33333333
555555

The above sends an http request.

Related recommendations:

axios source code analysis how to implement an HTTP request library

The above is the detailed content of Callback function in js to implement an http server. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn