nodejs搭建简单的web服务器

 

    1.1简介

  Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的、可扩展的网络应用。

也就是说,浏览器的Javascript是浏览器js代码解析,而Node.js则是服务器端JS的代码解析器,存于服务器端的JS代码由Node.js来解析和应用。

注:虽然从某种意义上讲Nodejs和js 是同一种产物,写法用法不尽相同,但是重点来了,nodejs在作用域服务端,js只是作用域浏览器端,js可以指向浏览器,nodejs指向不了浏览器,所以有些api是不同的。

同理:js为弱类型语言,那么nodejs也是弱类型语言在语言算法上有事会有偏差,如果开发银行系统,支付系统不要用nodejs。(nodejs 适合IO密集型应用,不适合于CPU密集型应用。)

  

 1.2node模块类型

 

  模块类型有:   

    1)官方提供的原生模块
      global、util、querystring、url、buffer、fs、http、
    2)第三方模块
      mysql、oracle、express
    3)自定义模块
      文件模块和目录模块

  1.3常用的原生模块 — 难点重点

      1)querystring模块用于处理http请求url中的查询字符串
          var obj=qs.parse(str); 把查询字符串解析为js对象
          var str=qs.parse(obj); 把js对象转换为查询字符串

      2)url 模块用于解析一个http请求地址,获取其中各个不同的部分
          var obj = url.parse(str) 把一个url字符串解析为一个对象
          var obj = url.parse(str,true) 把一个url字符串解析为一个对象,并把其中的查询字符串也解析为对象

      3)buffer 缓冲区,本质是一块内存区域,用于暂存以后要用到的数据(可能是数字,字符串,二进制图片、音视频等),
      该区域就成为“缓存”。 ******全局对象无需require引用******

 1 //创建一个大小为10字节的缓冲区
 2 var buf1 = Buffer.alloc(10); //alloc:分配
 3 console.log(buf1);
 4 var buf2 = Buffer.alloc(1024*3); //alloc:分配3kb大小的缓冲区
 5 console.log(buf2);
 6 var buf3=Buffer.from(['a','b','c']);
 7 console.log(buf3);
 8 //使用一个字符串创建一个缓冲区
 9 var buf4=Buffer.from('abcd');
10 console.log(buf4);
11 var buf5=Buffer.from('一二三文');
12 console.log(buf5);
13 
14 //把缓冲区的内容转换为字符串
15 console.log(buf5.toString());

 

                   4)fs 文件系统模块
                              fs模块提供了对文件系统中的文件/目录进行增删改查、读写的功能。

 1 //同步读取文件中的内容
 2 var data=fs.readFileSync(file);
 3 //同步向文件中写出内容(删除已有内容)
 4 fs.writeFileSync(file,str/buf);
 5 //同步向文件中追加写出内容(不删除已有内容)
 6 fs.appendFileSync(file,str.buf)
 7 
 8 例如fs异步读写文件 不需要等待直接往下走
 9 //异步读取文件中的内容
10 fs.readFile(file,funcgtion(err,data){
11 
12 });
13 //异步向文件中写出内容(删除已有内容)
14 fs.writeFile(file,str/buf,function(){
15 
16 });
17 //异步向文件中追加写出内容(不删除已有内容)
18 fs.appendFile(file,str.buf,function(){
19 
20 });

 

                       5)http 模块可用于编写基于http协议的客户端程序(即浏览器);
                                         也可以编写基于http协议的服务器端程序(即web服务器)

                                         用http模块编写web服务器:var server=http.createServer();
                                                       1)接收客户端的http请求消息
                                                       2)解析客户端请求消息
                                                       3)读取客户端请求的文件。
                                                       4)向客户端发送http响应消息,主体就是客户端请求的文件

 

   1.4如何搭建一个web服务器

        讲了上述内容,我们接下来可以讲一下如何用nodejs搭建一个小型的web服务器啦!

 1 const http=require('http');
 2 const url=require('url');
 3 const fs=require('fs');
 4 //创建一个http服务器
 5 var server=http.createServer();
 6 //让http服务器监听指定的端口
 7 server.listen(80);
 8 //当客户端请求到来时,处理请求消息
 9 server.on('request',function(req,res){
10     //处理消息 req请求消息,res响应消息
11     console.log('nodejs服务器接收到一个请求');
12     //解析客户端发来的请求消息
13     console.log('请求地址'+req.url);
14     var objURL=url.parse(req.url);
15     /*console.log(objURL);*/
16     res.setHeader('Content-Type','text/html;charset=utf-8');
17     var path = objURL.pathname;
18     if(path==='/login'){
19         
20         /*res.write('<h1>欢迎访问登录页面</h1>');*/
21         fs.readFile('./public/login.html',(err,data)=>{  
22             if(err){
23                 res.write('<h1>报错了</h1>');
24             }else{
25                 res.statusCode=200;
26                 res.write(data);
27                 res.end();
28             }
29         });
30         
31     }else if(path==='/index'){
32         
33         fs.readFile('./public/index.html',(err,data)=>{
34             if(err)throw err;//若存在错误抛出错误,后面不执行
35             res.statusCode=200;
36             res.write(data);
37             res.end();
38             
39         });
40     }else{
41         
42         fs.readFile('./public/404.html',(err,data)=>{
43             if(err){
44                 res.write('<h1>报错了</h1>');
45             }else{
46                 res.statusCode=404;
47                 res.write(data);
48                 res.end();
49             }
50         });
51     }
52 });

 

 

本文适用初级者,如想搭建健全的web服务器,还需要中间件更多的知识点,以后博文会更新,敬请期待。

 

本文为原创,如有不足之处请指正。

版权声明:本文为wenbodeboke原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wenbodeboke/p/9646840.html