美文网首页
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