管道pipe的实现原理:
let fs = require("fs");
let rs = fs.createReadStream("C:/Users/23133/Desktop/晓阳.jpg");
let ws = fs.createWriteStream(__dirname + "/source1/pipe1.jpg");
rs.once("open",()=>{
console.log("读入流通道打开");
})
ws.once("open",()=>{
console.log("写入流通道打开");
})
rs.on("data",(data)=>{
//flag:判断文件流是否完成写入的标志
let flag = ws.write(data);
//如果没有完成,让读取流暂停
if(!flag){
console.log("文件未读取完成!!!");
rs.pause();
}
});
//drain事件表示上次的文件流写入已经完成,表示可以开始下次文件流的读取和写入
ws.on("drain",()=>{
console.log("上个文件流读取完毕!");
// 让读取流继续
rs.resume();
});
//读取完毕
rs.once("end",()=>{
console.log("文件传输完成");
ws.end();
console.log("文件接受完成");
});
rs.once("close",()=>{
console.log("文件读取完成,通道关闭");
});
ws.once("close",()=>{
console.log("文件写入完成,通道关闭");
})
http模块
手动搭建本地服务器:
let http = require("http");
let server = http.createServer((req,res)=>{
//解决乱码问题
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
//
res.end("明天过后")
});
server.listen(3001,"127.0.0.1",()=>{
console.log("3001端口已启动");
});
监听服务器连接错误事件:
server.on("error",()=>{})
监听服务器连接关闭:
let http = require("http");
let server = http.createServer((req,res)=>{
//解决乱码问题
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
//
res.end("明天过后")
});
server.listen(3001,"127.0.0.1",()=>{
console.log("3001端口已启动");
setTimeout(function(){
server.close();
},2000);
});
server.on("close",()=>{
console.log("服务器已关闭");
});
监听服务器连接超时:
let http = require("http");
let server = http.createServer((req,res)=>{
//解决乱码问题
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
//
res.end("明天过后")
});
server.listen(3001,"127.0.0.1",()=>{
console.log("3001端口已启动");
});
server.setTimeout(8000,()=>{
console.log("设置服务器超时时间为8s");
});
server.on("timeout",()=>{
console.log("连接已超时");
})
创建请求日志:
let http = require("http");
let fs = require("fs");
let ws = fs.createWriteStream(__dirname + "/request.log")
let server = http.createServer((request,response)=>{
//解决乱码问题
response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
ws.write("method:" + request.method + "\n");
ws.write("url:" + request.url + "\n");
ws.write("headers:" + request.headers + "\n");
response.end("孑然一身,风雨无阻!");
});
server.listen(3002,"127.0.0.1",()=>{
console.log("3002端口已启动");
});