美文网首页
NodeJS——搭建web服务器

NodeJS——搭建web服务器

作者: 张先觉 | 来源:发表于2020-06-06 12:50 被阅读0次

    主要借助http模块,迅速搭建一个web服务器。

    #解释

    1. 搭建一个web服务器,代码如下:
    const http = require('http');
    
    let server = http.createServer((req,res)=>{
        res.end("Hello Wrold");
    });
    
    server.listen(3000,()=>{
        console.log("server is running");
    });
    
    // node index.js 运行
    // localhost:3000/ 访问地址
    
    1. fs文件系统,读文件、写文件、创建文件等操作,必备模块。代码如下:
    const fs = require('fs')
    
    // readFile(文件URL,CallBack)
    // writeFile(文件存到URL,Buffer数据,CallBack)
    fs.readFile('./lib/banner.jpg',(err,data)=>{
        fs.writeFile('./lib/img.jpg',data,()=>{});
    })
    
    //  所有的文件都是以二进制的形式进行存储,node将数据存到内置模块Buffer
    fs.readFile('./lib/banner.jpg',(err,data)=>{
        fs.writeFile('./lib/img_copy.jpg',data.toString(),(err)=>{});// 图片无法识别
    })
    
    1. crypto签名模块,免费提供了md5sha1等散列算法,用于签名,提高安全性。代码如下:
    const Crypto = require('crypto');
    
    let obj = Crypto.createHash('md5'); // md5散列算法
    obj.update('123456');
    
    console.log(obj.digest('hex')); // hex、16进制、e10adc3949ba59abbe56e057f20f883e
    
    
    // 二次签名 + 密文(自己都不知道):防止暴力破解
    // 暴力破解:将所有可能的结果存到数据库当中,在根据用户查询内容,反推结果
    const crypto = require('crypto');
    
    function md5(str){
        let obj = crypto.createHash('md5');
        obj.update(str);
        return obj.digest("hex");
    }
    
    console.log(md5(md5('123456') + "fdlfkdafhldafhl"));  
    
    1. Node访问服务器里面的静态资源,代码如下:
    const http = require('http');
    const fs = require('fs');
    
    let server = http.createServer((req,res)=>{
        fs.readFile(`www${req.url}`,(err,data) => { // 访问server本地资源
            if(err){
                res.writeHead(404); // 设置响应头状态码,机器看的
                res.write("Not Found"); //  设置响应体,给人看的
            }else{
                res.write(data);
            }
            res.end();
        })
    });
    
    server.listen(3000);
    

    6.node处理get请求、post请求,描述如下:

    • get请求,例如localhost:3000/login?user="123456",数据连带着URL地址存到请求头,传到服务器。
    • post请求,例如localhost:3000/register",数据存到请求体body,传到服务器。而且,body数据,一个大的数据包,会分成数个小包,一份一份的,民用网络一般是这样处理的
    • url.parse(),解析整个URL地址,querystring.parse()仅仅是解析数据那一块。然而,get请求、post请求对请求数据体的编码是一样的,只是存放的地址不同。
    // GET
    let {pathname,query} = url.parse(req.url,true); 
    
    // POST
    let str = "";
    req.on('data', data => {    // 开始传数据了
        str += data;
    });
    req.on('end',()=>{  // 数据传完了,解析吧
        let data = querystring.parse(str)
    });
    

    7.封装Buffer.split(),处理buffer文件数据:

    // buf.indexOf(value[, byteOffset])  value要查找的值 \ byteOffset偏移量从哪里开始找。默认值: 0。 \  没有查到返回-1   
    // buf.slice([start[, end]]) start新Buffer开始的位置。默认值: 0。 \   end新Buffer结束的位置(不包含)。默认值: buf.length。
    
    let buffer = Buffer.from("1234-=-5678-=-abcd");
    Buffer.prototype.split = Buffer.prototype.split || function(b){
        let arr = [];
        let current = 0;    // 记录从哪里开始分割
        let n = 0;      // 记录分割到哪里
        while((n=this.indexOf(b,current)) != -1){
            arr.push(this.slice(current,n));
            current = n + b.length;
        }
        arr.push(this.slice(current))
        // console.log(arr.map(buffer => buffer.toString()));
        return arr;
    }
    
    buffer.split('-=-');
    

    相关文章

      网友评论

          本文标题:NodeJS——搭建web服务器

          本文链接:https://www.haomeiwen.com/subject/vtuzzhtx.html