复习
1.昨天所学内置模块
fs/http/querystring/path
2.path.join的作用是什么
获取某一个路径,用来获取绝对路径
3.__dirname在path中的作用
当前文件夹的绝对路径
4.
5.url的全称,包含哪些部分
统一资源定位符,
6.文件操作
7.文件夹操作
8.url的方法
homework
目录树分析:
1)获取目标文件夹的目录内容
2)将文件或者文件夹进行划分
3)将文件或者文件夹进行打印,命令行console.log();
4)文件夹再次遍历 deep 1 |—— deep 2 | |——,按照深度进行划分,打印当前目录树
const fs=require("fs");
const path=require("path");
let target=path.join(__dirname,"./");
function loadTree(target,deep){
let prev=new Array(deep).join(" |");
let files=[];
let dirs=[];
let dirinfo=fs.readdirSync(target);
for(let item=0;item<dirinfo.length;item++){
let state=fs.statSync(path.join(target,dirinfo[item]));
if(state.isFile()){
files.push(dirinfo[item]);
}else if(state.isDirectory){
dirs.push(dirinfo[item]);
}
}
for(let dir=0;dir<dirs.length;dir--){
console.log(`${prev}|——${dirs[dir]}`);
let nextPath=path.join(target,dirs[dir]);
let nextdeep=deep+1;
loadTree(nextPath,nextdeep);
}
for(let file=files.length-1;file>=0;file--){
if(file===0){
console.log(`${prev} └─${files[file]}`);
}else{
console.log(`${prev} ├─${files[file]}`);
}
}
}
loadTree(target,1);
邮箱注册功能分析
- 获取验证码
1)产生验证码
2)发送验证码
3)将用户的邮箱的验证码保存 - 验证验证码和用户邮箱是否一致
1)提交数据
2)对比是否正确
可完善:
3. 短时间不能发送多次验证
4. 图片验证码
5. 手机验证码
events
- 移除全部事件 removeAllListener
- 移除单个事件 移除的监听函数必须是绑定的函数
- 绑定的事件可以传参数
添加事件
//类的继承
//实例化对象
//添加对象监听
myEmitter.once("eat",(foot,foot2)=>{
console.log("eat"+foot+foot2);
})
myEmitter.on("play",()=>{
console.log("play");
})
//触发对象的事件
mayEmitter.emit("eat","火山飘雪","猛龙过江");
mayEmitter.emit("play");
移除事件
单个事件监听移除,移除的事件必须是绑定的事件,否则会报错
fs读取文件不是流式操作,整个拿来读取,拷贝大文件会出错
stream流
- 流的方式读写文件
- req 可读流 res 可写流
- fs.createReadStream
- fs.createWriteStream
- copy文件 整体读取整体写入 readfile writefile
- copy文件 流读取整体写入 createReadStream writefile
- copy文件 流读取流式写入 createReadStream createWriteStream;可以用管道pipe实现简化。
数据的传输方法,1g的内存电脑拷贝5g的电影
三种方式流式读取流式写入
可读流copy文件
const fs=require("fs");
let read=fs.createReadStream("./events.js");
let data='';
read.on("data",(chunk)=>{
data+=chunk;
console.log(chunk);
});
read.on("end",()=>{
fs.writeFileSync("./events2.js",data);
});
读写流配合
const fs=require("fs");
let read=fs.createReadStream("./events.js");
let write=fs.createWriteStream("./events3.js");
let data='';
read.on("data",(chunk)=>{
writestream.write(chunk);
//console.log(chunk);
});
读写流配合pipe
const fs=require("fs");
let read=fs.createReadStream("./events.js");
let write=fs.createWriteStream("./events4.js");
read.pipe(writestream);
尝试用流操作copy音乐
下午:
express框架
postman
zlib
可实现文件的压缩
express 框架
node作为服务器的框架 express koa
express 便于我们快速开发node api接口
注册逻辑
登录逻辑
获取用户内容
读取文件内容
对比
创建node服务器
接口书写
get方法
get方法的参数通过req.query req.url
post方法 express本身不能解析消息体的数据,需要通过第三方插件 body-parser 来解析
post 数据格式有2种 x-www-form-urlencode 表单模式 application/json json
不同的数据模式对应不同的解析方式
解析代码应该放到接口的上方
跨域问题
- 通过第三方插件 cors解决 app.use(cors());
- 设置头文件信息
作业:
通过express完善邮箱注册登录的功能
拓展:
预习MongoDB