主要借助http模块,迅速搭建一个web服务器。
#解释
- 搭建一个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/ 访问地址
- 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)=>{});// 图片无法识别
})
-
crypto签名模块,免费提供了
md5
、sha1
等散列算法,用于签名,提高安全性。代码如下:
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"));
- 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('-=-');
网友评论