nodejs-Http模块-服务器搭建

Posted 德源3d24

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs-Http模块-服务器搭建相关的知识,希望对你有一定的参考价值。

目录

  1. Http协议简介
  2. http模块简介
  3. 服务器搭建步骤
  4. 服务器监听事件
  5. 简单创建服务器方式一
  6. 简单创建服务器方式二
  7. req请求对象详情案例
  8. res响应对象设置详情

 

HTTP协议简介


 

描述

Http是超文本传输协议,实现浏览器和服务器之间传输数据,通常把浏览器称为客户端/前端服务器称为后端, 而http协议分为如下二种

      1. http协议:实现客户端和服务器之间传输数据的规则    不加密传输数据
      2. https协议:实现客户端和服务器之间传输数据,     加密传输数据

Http常用访问方式

      1. GET:GET访问不加密的,   并且提交的数据直接在地址栏中,    一般使用GET是请求一些资源访问

      2. Post:Post访问是加密的,  并且提交的数据都是在数据体里面,  一般访问比较重要安全级别比较高的资源才使用post访问  

 


http模块简介

      描述:

      1. http模块是node-npm内置模块
      2. 实现了客户端和服务器之间传输数据
      3. 必须引用http模块才能搭建服务器和客户端
      4. req请求对象包含了客户端的详细信息(url/请求参数/主机名/端口/协议/data数据)
      5. res响应对象可以设置服务器给客户端的请求和参数(设置/获得/删除/是否以发送/-响应头信息,  发送数据 

     附加重要:

      1. 服务器和客户端传输数据的格式是buffre(缓冲器/流)的模式,需要转换成对应的格式才能显示原数据

      2. 客户端和服务器之间传输数据,最好使用JOSN格式传输

服务器搭建

搭建步骤:

      • 通过require函数引用http模块
      • 通过createServer函数创建服务器实列
      • 通过listen函数监听端口
      • 通过setTimeout设置超时时间
      • 通过on方法绑定监听事件

服务器监听事件:

  1. request:客户端发送请求时触发此事件
  2. connect:客户端发送连接请求时触发此事件
  3. close:服务器关闭是触发此事件
  4. error:发送错误是触发此事件
  5. timeout:连接超时触发此事件

 简单创建服务器方式一

 1 //引用http模块
 2 const http = require(\'http\');
 3 
 4 //创建服务器实列,并且绑定请求事件(request),客户端发送请求时触发事件
 5 let server = http.createServer(function (req,res) 
 6 {
 7     /**
 8      * req:请求头对象,里面包含了客户端发送过来的数据,也包含了地址/端口等等
 9      * res:响应对象,把数据发送给客户端,通过end方法实现发送数据
10      */
11     console.log(req.method);//获取请求方法GET/post
12     console.log(req.url);//获得请求对象的url地址
13     console.log(req.headers);//获得请求头信息
14     console.log(req.httpVersion);//获得http版本号
15     console.log(req.socket);//获得请求对象的socket对象
16 
17     res.end("欢迎使用")//发送数据给客户端,并且关闭断开连接
18 
19 }).listen(3000,()=>{console.log(\'端口开始运行是触发\');});//监听断开事件

简单创建服务器方式二

 1 //引用http模块
 2 const http = require(\'http\');
 3 
 4 //创建服务器实列
 5 let server = http.createServer()
 6 
 7 //绑定(监听)请求事件
 8 server.on("request",(req,res)=>
 9 {
10     console.log(req.method);//获取请求方法GET/post
11     console.log(req.url);//获得请求对象的url地址
12     console.log(req.headers);//获得请求头信息
13     console.log(req.httpVersion);//获得http版本号
14     console.log(req.socket);//获得请求对象的socket对象
15 
16     res.end("欢迎使用")//发送数据给客户端,并且关闭断开连接
17 })
18 
19 //监听端口,当服务器运行时触发此事件
20 server.listen(8080,()=>{console.log(\'服务器启动成功\');})

 req请求对象详情案例

 1 const http = require(\'http\');
 2 const url = require(\'url\');
 3  
 4 //创建一个http服务器
 5 let server = http.createServer();
 6 //监听端口
 7 server.listen(8888, \'0.0.0.0\');
 8  
 9 //接收到客户端请求时触发
10 server.on(\'request\', function (req, res) {
11  
12     //解析url返回一个url对象
13     //如果参数二设为true,则url对象中的query属性将通过querystring.parse()生成一个对象
14     let params = url.parse(req.url, true);
15  
16     //完整url地址
17     console.log(\'href\', params.href);//index?name=123&age=32
18     //主机名,包含端口
19     console.log(\'host\', params.host);
20     //主机名,不包含端口
21     console.log(\'hostname\', params.hostname);
22     //端口
23     console.log(\'port\', params.port);
24     //协议
25     console.log(\'protocol\', params.protocol);
26     //路径,包含查询字符串
27     console.log(\'path\', params.path);
28     //路径,不包含查询字符串
29     console.log(\'pathname\', params.pathname);
30     //查询字符串,不包含 ?而且返回一个对象,包含了网址提交的参数数据,但是是在原型里面
31     console.log(\'query\', params.query);
32   //获取网址GET提交的变量的值,
 
33 console.log(\'query\', params.query.变量);
       //追加--第二种方式获得参数
       let url2=url.parse(req.url,true).query;
       console.log(url2.age);
32     //查询字符串,包含 ?
33     console.log(\'search\', params.search);
34     //散列字符串,包含 #
35     console.log(\'hash\', params.hash);
36  
37     res.end(\'end\');
38 });

res响应对象设置详情

 1 const http = require(\'http\');
 2 const url = require(\'url\');
 3  
 4 //创建一个http服务器
 5 let server = http.createServer();
 6 //监听端口
 7 server.listen(8888, \'0.0.0.0\');
 8  
 9 //接收到客户端请求时触发
10 server.on(\'request\', function (req, res) {
11  
12     //设置响应头信息
13     res.setHeader(\'Content-Type\', \'text/html;charset=utf-8\');
14  
15     //获取响应头信息
16     res.getHeader(\'Content-Encoding\');
17  
18     res.setHeader(\'test\', \'test\');
19     //删除响应头信息
20     res.removeHeader(\'test\');
21  
22     //判断响应头是否已发送
23     console.log(res.headersSent ? \'已发送\' : \'未发送\');
24  
25     //注意writeHead()与setHeader()的区别,setHeader()并不会立即发送响应头。
26     //而writeHead()会发送,writeHead()设置的响应头比setHeader()的优先。
27     res.writeHead(200, {
28         \'aaa\': \'aaa\'
29     });
30  
31     //判断响应头是否已发送
32     console.log(res.headersSent ? \'已发送\' : \'未发送\');
33  
34     //如何不发送日期 Date,设置为false将不发送Date
35     res.sendDate = false;
36  
37     //设置响应的超时时间
38     res.setTimeout(30 * 1000);
39     res.on(\'timeout\', function () {
40         console.log(\'响应超时\');
41     });
42  
43     //向客户端发送数据
44     //由于res响应对象也是一个流,所以可以使用write()来写数据
45     res.write(Buffer.from(\'你好\'));
46     res.write(Buffer.from(\'欢迎\'));
47  
48     res.end(\'end\');
49 });

HTTP客户端简介(前端)

描述:

    1. 客户端就是和用户实现交互的,浏览器展现页面.用户查看页面就形成了交互
    2. 客户端把用户的数据传输给服务器,一般服务器处理逻辑判断/储存

 

 

 

 

以上是关于nodejs-Http模块-服务器搭建的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件地将 C 代码片段编译到我的 Perl 模块?

node 环境下简单web服务器搭建代码

怎么用node搭建服务器

CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

Nginx 静态文件服务器搭建及autoindex模块解析