js中回调函数实现一个http服务器

js中回调函数实现一个http服务器

内容导读

收集整理的这篇技术教程文章主要介绍了js中回调函数实现一个http服务器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5043字,纯文字阅读大概需要8分钟

内容图文

本篇文章分享给大家的内容是关于js中回调函数实现一个http服务器,内容很详细,接下来我们就来看看具体的内容,希望可以帮助到大家。

网络操作

首先使用http模块实现一个http服务器

var http = require('http');

// 使用http模块http.createServer (



function (request, response) {





response.writeHead(200, {'Content-Type': 'text-plain'});

// http响应头部





response.end('hello wordn');

// 返回的内容



}

).listen(8124);

// 监听8124端口
PS C:UsersmingmDesktoptest> 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:UsersmingmDesktoptest> node main.jsGET--------------{ 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:UsersmingmDesktoptest> node main.js程序执行结束!3333null333333333333333333333333333333PS C:UsersmingmDesktoptest>

当遇到需要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 wordn');

console.log(55555555555);

}).listen(8124);

执行结果

PS C:UsersmingmDesktoptest> node main.jsGET{ 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[]444444444444455555555555222222222222222GET{ 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[]444444444444455555555555222222222222222

此执行为异步执行,先执行到

console.log(body);

由于request.on需要等待返回,所以异步执行下方的语句

console.log(444);

接着返回内容,再执行request.on,将结果通知回到函数的最后一个参数,然后执行完毕。

http响应

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

PS C:UsersmingmDesktoptest> node main.js4444444444442222222233333333555555
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请求。

相关推荐:

axios源码解析如何实现一个HTTP请求库

以上就是js中回调函数实现一个http服务器的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的js中回调函数实现一个http服务器全部内容,希望文章能够帮你解决js中回调函数实现一个http服务器所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com