Node 之http模块

摘要:
在Node上js的核心模块主要包括http、fs、url和querystring模块。url模块已在上一篇博客文章中介绍。http模块在上一篇博客文章中使用过,我将在其中详细分析它的方法和原理。http模块是Node中最引人注目的模块。js原生模块。Node的http模块。js可以自己构建服务器,性能非常可靠!节点。js服务器服务器。jsconsthttp=require;constserver=http.createServer(函数(req,res){res.writeHead(200,{“内容类型”:“text/html;charset=UTF-8”});Res.end(“欢迎来到perfect的博客公园!!!上面的req和Res分别是http.IncomingMessage和http.ServerResponse。

   在Node.js的核心模块中主要有http、fs、url、querystring模块,在前面的博文中有一篇已经介绍了url模块,在上一篇博文中http模块使用到过,在这篇博文中我将详细分析其方法和原理。

  1、http模块-----创建HTTP服务器、客户端

         使用http模块只需要在文件中通过require(‘http’)引入即可。http模块是Node.js原生模块中华最为亮眼的模块。在传统的HTTP服务器会由Apache、Nginx、IIS之类的软件来担任,但是Node.js并不需要。Node.js的http模块本身就可以构建服务器,而且性能非常可靠哟!

        (1)Node.js服务器端

 server.js

const http=require('http');

const server=http.createServer(function(req,res){
    
    
    
    res.writeHead(200,{
        
        "Content-Type":"text/html;charset=UTF-8"
    });
    
    res.end("欢迎来到perfect*的博客园!!!");
    
    
});


server.listen(3000,function(){
    
    console.log('listening port 3000');
});

运行结果:

Node 之http模块第1张

在浏览器中输入http://localhost:3000/或者http://127.0.0.1:3000/,页面中会显示如下字样:

Node 之http模块第2张

  http.createServer()方法返回的是http模块封装的一个基于事件http服务器。同样,http.request是其封装的一个HTTP客户端工具,可以用来向http服务器发起请求。上面的reqres分别为http.IncomingMessagehttp.ServerResponse。

     http.Server的事件主要有

  •  request:最常用的事件,当客户端请求到来时,该事件被触发,提供req和res参数,表示请求和响应信息。
  • connection:当Tcp连接建立时,该事件被触发,提供一个socket参数,是net.Socket的实例。
  • close:当服务器关闭时,触发事件(注意不是在用户断开连接时)

     http.createServer()方法其实就是添加一个request事件进行监听,利用下面的代码也可以实现上面的效果哦!

const http=require('http');

const server=new http.Server();
server.on('request',function(req,res){
    
    res.writeHead(200,{
        
        "Content-Type":"text/html;charset=UTF-8"
        
    });
    res.end("欢迎来到perfect*的博客园哟!!!");
    
    
});

server.listen(3000,function(){
    
    console.log('welcome !!!');
});

Node 之http模块第3张

浏览器显示效果:

Node 之http模块第4张

http.IncomingMessage是HTTP请求提供的信息,提供了以下3个事件:

  • data:当请求体数据到来时该事件被触发。该事件提供一个chunk参数,表示接受的数据。
  • end:当请求体数据传输完毕时该事件被触发,此后不会再有数据。
  • close:用户当前请求结束时,该事件被触发。

http.IncomingMessage提供的主要属性有:

  • method:HTTP请求的方法,比如:get。
  • header:http请求头。
  • URL:请求路径。
  • httpVersion:http协议版本。

因此,我将把上面提到的知识点融合到上面第一个服务器的代码中。

const http=require('http');

const server=http.createServer(function(req,res){
    let data='';
    req.on('data',function(chunk){
        
        data += chunk;
        
    });
    req.on('end',function(){
        let method=req.method;
        let url=req.url;
        
        let headers=JSON.stringify(req.headers);
        let httpVersion=req.httpVersion;
        
        res.writeHead(200,{
        
        "Content-Type":"text/html;charset=UTF-8"
    });
    
    let dataHtml='<p>data:'+data+'</p>';
    let methodHtml='<p>method:'+method+'</p>';
    let urlHtml='<p>url:'+url+'</p>';
    let headersHtml='<p>headers:'+headers+'</p>';
    let httpVersionHtml='<p>httpVersion:'+httpVersion+'</p>';
    
    let resData=dataHtml+ methodHtml+ urlHtml+ headersHtml+httpVersionHtml;
    res.end(resData);
        
    });
    
    
    
    
    
    
    
    
});


server.listen(3000,function(){
    
    console.log('listening port 3000');
});

Node 之http模块第5张

 在浏览器中的显示页面:

Node 之http模块第6张

http.ServerResponse是返回客户端的信息,其常用的方法为:

  • res.writeHead(statusCode,[heasers]):向请求的客户端发送响应。
  • res.write(data,[encoding]):向请求发送内容;
  • res.end([data],[encoding]);结束请求

这些方法在上面的代码中已经实现。

2、客户端向HTTP服务器发起请求

      在上面的方法中都是HTTP模块在服务端的使用,接下来看看客户端的使用,向HTTP服务器发起

  •   http.request(option[,callback]):option为json对象,主要的字段有host、port(默认为80)、method(默认为get)、path(请求的相对路径,默认“/”、header等。
  • http.get(optionoption[,callback]):http.request()使用HTTP请求方式get的简便方法。
const http=require('http');

let reqData='';
http.request({
    
    'host':'127.0.0.1',
    'port':'3000',
    'method':'get'
},function(res){
    res.on('data',function(chunk){
        
        reqData +=chunk;
    });
    
    res.on('end',function(){
        
        console.log(reqData);
        
    });
}).end();

浏览器中的显示效果:

Node 之http模块第7张

免责声明:文章转载自《Node 之http模块》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇算法名称 Alias Method_nop_();下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vscode如何调试node项目(给node项目打断点)

方法一:  vscode安装Node Debug这个插件,如下 然后在package.json文件里添加 main 字段, 内容为 node 项目的启动入口文件, 如下图所示, 然后点击下面箭头所指的Debug按钮, 这个按钮是Node Debug 插件自动生成的。 点击后出现下面这个,然后选择 main 对应的那个入口文件即可。 点击完如下,Dub...

Android从相册获取图片

应用中经常会有去相册获取图片的需求,每次总是会忘,现在这做个记录,以便以后查阅。 从应用去相册获取图片主要有以下几个步骤: 1、设置intent调用系统相册 2、进入相册选取图片,如果相册没有满意的图片,可以使用相机照相获取,最后返回数据到应用 3、应用获取图片后,调用裁剪程序对图片进行裁剪 4、返回裁剪的图片并显示出来 一、设置intent调用系统相册,...

从零开始的野路子React/Node(7)将Swagger(OpenAPI)运用于后端API

之前公司做项目是用过swagger来配置python模型的API,感觉非常好用。swagger可以提供request, response甚至error的验证机制,十分便利。node当然也可以用啦。 我们需要使用的库主要是swagger-ui-express,它将提供swagger的相关功能以及一个UI,方便查看和调试。 1、初始设定 老规矩,我们还是通过e...

服务器安装node全教程

我的服务器centos,安装node时出了点小麻烦,在这里记述我的方法。 1、进入node下载网站https://nodejs.org/en/download/,这里右键复制下载链接 2、进入centos服务器,进入目录 cd /usr/local/src/ 3、进入centos服务器输入命令,这里的链接换为复制的链接 wget https://node...

iframe+postMessage不同源页面通信

父页面 父页面运行在8080端口,通过iframe标签引用子页面,通过postMessage发送消息给iframe中的子页面。 <template> <div class="hello"> <iframe src="http://10.10.30.5:8081" height="100%"><...

Vue数据更新但页面没有更新的多种情况

Vue数据更新但页面没有更新的多种情况 1、Vue 无法检测实例被创建时不存在于 data 中的 变量 原因:由于 Vue 会在初始化实例时对 data中的数据执行 getter/setter 转化,所以 变量必须在 data 对象上存在才能让 Vue 将它转换为响应式的。 例如: new Vue({ data:{}, template: '&l...