• nodejs搭建web服务器初级


    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服务器,还需要中间件更多的知识点,以后博文会更新,敬请期待。

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

  • 相关阅读:
    进程实际操作篇2
    进程的实际操作篇1
    进程的理论知识
    解决套接字粘包,udp套接字对象的使用和socketserver模块实现并发
    day24-网络知识扫盲,socket的基本使用
    day23-网络编程之互联网基础,tcp/ip协议详细介绍
    day21-多态和多态性,鸭子类型,反射,内置方法,异常处理
    JAVA WEB小测
    JAVA动手动脑
    JAVA课上动手动脑问题2
  • 原文地址:https://www.cnblogs.com/wenbodeboke/p/9646840.html
Copyright © 2020-2023  润新知