昨天的回顾作业:
根据自己的需求来完善发送验证码的需求,群发的功能
常用的内置模块
- url
- querystring
- http
- event
- path
- fs
- stream
http模块
- 跨域
- 创建服务器
- 爬虫 获取数据 获取图片 获取音频
爬虫
- 通过获取网页的源代码
1) 用http接口的get方法进行获取源码:http.get();
2)cheerio插件:实现将一堆字符串进行处理;快速分析页面中有哪些东西。
npm install cheerio
const cheerit=require("cheerio)
const $=cheerio.load(rawData)//将数据格式进行处理,数据格式应该有正常的HTML格式
$("img").each(function(index,el){
$(this).attr("src")
})
//通过jq的方式获取爬取的数据
//目前所学知识通过ajax动态生成的数据无法爬取
- 对源代码进行分析,获取数据,字符、图片的地址、音乐的地址
文件操作
- 对文件夹的操作
新建文件夹
创建文件夹
const fs=require("fs");
fs.mkdir('./test',(err)=>{
if(err){
console.log(new Error("error"))
}else{
console.log("ok");
}
})
//node的回调函数中有一个规范 错误优先,回调函数的第一个参数
let result=fs.mkdirSync("./test2");
console.log("a");
console.log(result);
//同步调用出错会终止执行,需要用try catch捕获错误
try{
let result=fs.mkdirSync();
}catch(e){
console.log(new Error("出错了"))
}
删除文件夹,表示是不是出错
fs.rmdir("./test3",(err)=>{
console.log(err)
})
//删除文件 不存在的文件不能删除 不为空的文件不能删除
读取文件夹
fs.readdir("./test3",(err,files)=>{
console.log(err,files);
});
判断文件夹
//检测一个文件或者文件夹的状态
fs.stat("./test",(err,states)=>{
//stats 表示该文件获取文件夹的状态 size 表示文件大小
console.log(err,states,stas.isFile(),ststes.isDirectory());
})
- 对文件本身的操作
新建文件(写入内容)
fs.writeFile("./file.txt","写入内容",(err)=>{
console.log(err);
});
fs.appendFile("./file.txt","写入内容",(err)=>{
console.log(err);
if(err){throw err}
});
在文件操作中所有的路径都需要是绝对路径
创建文件,如果文件不错存在会自动新建,但是文件夹不存在,会报错误
console.log(new Error(“错误”));//打印错误对象
throw new Error(“错误”);//抛出错误的对象,终止执行
读取文件
fs.readFile("./file.txt",(err,data)=>{
if(err){throw err}
console.log(err,data.toString());
});
读取数据格式的修改方式:1.配置修改,第二个参数 2.toString 转化
删除文件
fs.unlink("./a.txt",(err)=>{
if(err){throw err}
console.log("删除ok");
});
//若删除一个不存在的文件,会报错
判断是否是一个文件
所有的异步都需要回调函数
所有的同步都不需要回调函数
作业
1.写一个模块,打印当前的目录树
分析:读取目录 目录有文件,有文件夹,区分文件或者文件夹,文件的话直接打印,文件夹继续读取目录
2.尝试用http下载图片,http的url换成图片,然后保存到文件中
分析:下载图片的原理:通过http请求图片数据,然后将图片保存到本地。设置数据格式为二进制,因图片的数据格式为二进制。
注意:网上连接的图片地址有时是时间戳,过一段时间就不能用了
案例: 在一个test文件夹下创建10个文件,文件的名字是01.txt 02.txt…每一个文件的内容都是数字 010203
判断文件是否存在
![](/qrcode.jpg)
fs.stat("./test",(err,stats)=>{
if(err){
fs.mkdir("./test",(err)=>{
if(err){throw Error("创建文件夹失败")}
console.log("创建文件夹OK");
for(var i=0;i<10;i++){
fs.writeFile(`./test/${i}.txt`,i,(err)=>{
if(err){throw Error("创建文件失败")}
console.log("创建文件成功");
})
}
})
}else{
throw new Error("test文件已存在”)
}
});
回调地狱 promise asyc…
URL
- 统一资源定位符
- format 对象变成字符串
- parse 字符串变为对象
http://www.baidu.com:8080/home/login/test?name=wy&ps=wanger#hash
// parse 将url字符串变温url格式的对象,参数2默认false,为true时,可以将query解析为对象
let result=url.format(obj);
console.log(result);
querystring
json 是一种数据格式 {“key”:“value”}
json字符串 是json格式的字符串
json对象 是json格式的对象
- stringify parse 对象字符串相互转化,其余参数参考split(“@”)
- unescape escape query中的汉字特殊字符,编码解码
let qs=require("querystring");
//将字符串转化为对象
let query="us=wangyi&ps=123"
//第二个参数是区分键值对的符号
//第三个参数是区分键值得符号
console.log(qs.parse(query,"&","="));
console.log(qs.parse(query,"?","="))
let qs=require("querystring");
let obj={
us:"wangyi",
ps:123
}
console.log(qs.stringify(obj,"@","="));
path 用处很大
- __dirname 获取当前文件所在的目录的绝对路径
- join(__dirname,"./test.js")智能拼接 唱歌用来获取绝对路径
- basename 获取文件名
- dirname 获取路径
- extname 获取扩展名
- isAbsolute 判断是否是绝对路径
path.join(__dirname,"./file.js");
path.join 作用:实现路径的拼接
path.join的参数没有限制,会自动拼接
主要作用:将参数进行智能拼接,主要用来获取绝对路径
作业:1.目录树
2. 写一个注册登录(fs)用文件系统写一个,存入文件系统,然后登录时从文件中获取判断是否存在
3. 写一个方法,可以删除一个文件夹
4. 进阶版 邮箱注册;输入框,点击获取验证码,保存键值对,key:邮箱,value: