node.js中的一些常用模块(url,querystring,events,fscheerio,http)
1、url:
const url = require("url"); let path = "https://www.baidu.com/s?wd=node&rsv_spt=1&rsv_iqid=0xbaa44b6c0003b789&issp=1&f=3&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=8&rsv_sug1=12&rsv_sug7=101&rsv_sug2=0&prefixsug=node&rsp=1&inputT=137915&rsv_sug4=142473"; /* ①url.parse: 参数1:url 参数2:布尔值 将一个url转换成一个对象 如果参数2 是一个true的情况下会将query(字符串)解析成一个对象 ②url.format:(参数是url.parse的返回值) 将一个urlObject转换成一个字符串url 例如: let urlObject = url.parse(path,true); let pathUrl = url.format(urlObject) ③url.resolve();(参数一是当前路径) 生成一个相对路径或者绝对路径 第二个参数如果加/则 跳转到绝对路径 第二个参数不加/ 跳转相对路径 */
2、querystring
const qs = require("querystring"); const url = require("url"); //let str = "%7B%22pageindex%22%3A1%2C%22isc2clist%22%3A2%2C%22hometabid%22%3A%226039dcc26ae7401191239559335de9ff%22%7D"; //console.log(qs.unescape(str)); /* ①qs.escape 转义 ②qs.unescape 反转义 例如: let key = "a=b=c=d"; let path = "http://www.baidu.com/s?a=1&b=2&"+qs.escape(key)+"=123&ds=111"; console.log(url.parse(path,true)) ③qs.parse()将字符串转为对象 参数1:字符串 参数2:分隔符 参数3:赋值符 默认的分隔符:& 赋值符号:= 例如: let str = "name+张三$age+20$sex+男"; console.log(qs.parse(str,"$","+")); ④qs.stringify()将对象转为字符串 参数1:字符串 参数2:分隔符 参数3:赋值符 默认的分隔符 & 赋值符号 = 例如: let obj = { name:"张三", age:22, sex:"男" } console.log(qs.stringify(obj,"@","#")) */
3、events
const EventEmitter = require("events"); class MyEvent extends EventEmitter{};//ES6的继承 let myEvent = new MyEvent(); function fn1(val){ console.log("111",val) } function fn2(val){ console.log("222",val) } function fn3(val){ console.log("333",val) } //事件的绑定 myEvent.on("handle",fn1); myEvent.on("handle",fn2); myEvent.on("handle",fn3); //移除 //myEvent.removeListener("handle",fn2) //myEvent.removeAllListeners("handle") //触发事件 myEvent.emit("handle","这是给你传递到的参数"); myEvent.emit("handle","这是给你传递到的参数"); /* ①事件绑定 on(eventName,cb) eventName:事件名称 cb:回调 ②事件触发 emit(eventName,params) 参数1:事件名称 触发的时候必须与on中的事件名称一致 参数2:需要传递的参数 ③事件移除 一定要在事件触发之前移除* removeListener(eventName,cb) 参数1:事件名称 参数2:需要移除的事件 ④setMaxListeners:设置最大可绑定的函数数量 参数是(n) ⑤移除所有事件 removeAllListeners(eventName) ⑥事件只触发一次 once
4、fs
const fs = require("fs");
/*
① fs.stat() 校验文件类型
参数1:文件的路径
参数2:回调
参数1:err
参数2:文件集合
isFile() 校验文件是不是一个文件
isDirectory 校验文件是不是一个文件夹
fs.stat("./index.js",(err,stats)=>{
if(!err){
console.log(stats.isDirectory())
}
})
②fs.readFile()
返回值是一个buffer文件 如果需要转换成字符串只需要加一个空的字符串
参数1:文件的路径
参数2:回调
参数1:err
参数2:data 读取到的数据
fs.readFile("./index.txt",(err,data)=>{
console.log(data+'');
})
③fs.writeFile()
fs.writeFile("./index.txt","1234",(err)=>{})
参数1:文件的路径
参数2:文件的内容
参数3:回调
参数err
④appendFile()
fs.appendFile("./index.txt","哈哈哈",(err)=>{})
参数1:文件的路径
参数2:追加的内容
参数3:回调
参数err
⑤fs.readdir();列出文件夹的目录
fs.readdir("../fs",(err,data)=>{
console.log(data)
})
参数1:文件的路径
参数2:回调
参数1 err
参数2 文件的目录信息 是一个数组
⑥fs.rename(); 更改文件或者文件夹的名称
fs.rename("./index.txt","list.txt",(err)=>{})
参数1:文件的路径
参数2:文件更改的名称
参数3 回调
*/
5、http.js
const http = require("http"); const cheerio = require("cheerio"); let url = "http://www.mobiletrain.org/?pinzhuanbdtg=biaoti"; const fs = require("fs"); /* url:请求的地址 cb:回调 res cheerio:可以让我们操作数据的时候根jquery一样进行操作 cheerio不是JQ */ http.get(url,(res)=>{ let str = ""; //请求到的数据是一块一块进行接收的 在接收的时候会触发一个data事件 res.on("data",(data)=>{ str+=data; }) //当接收完毕的时候会触发end这个事件 res.on("end",()=>{ //将请求过来的数据进行封装到$ let $ = cheerio.load(str); //类似与JQ的数据操作 let lis = $(".banner_up_left").find("a"); let obj = {} fs.readFile("./data.json",(err,data)=>{ var data = JSON.parse(data+''); for(var i=0;i<lis.length;i++){ obj.title = lis.eq(i).find("span").text(); data.data.push(obj); obj = {}; } fs.writeFile("./data.json",JSON.stringify(data),(err)=>{}) }) // fs.readFile("./data.json",(err,data)=>{ // let d =JSON.parse(data+"").data; // for(var i=0;i<lis.length;i++){ // obj.title = lis.eq(i).find("span").text(); // d.push(obj); // obj = {}; // } // let json = { // "data":d // } // fs.writeFile("./data.json",JSON.stringify(json),(err)=>{}) // }) // console.log(d) }) })
6、server.js(服务器,一个文件夹也算一个服务器)
const http = require("http"); const fs = require("fs"); http.createServer((req,res)=>{ if(req.url !="/favicon.ico"){ if(req.url == "/"){ fs.readFile("./index.html",(err,data)=>{ if(!err){ res.writeHead(200,{"Content-type":"text/html;charset=utf8"}) res.end(data); } }) }else if(req.url == "/list"){ fs.readFile("./list.html",(err,data)=>{ if(!err){ res.writeHead(200,{"Content-type":"text/html;charset=utf8"}) res.end(data); } }) }else if(req.url == "/goods"){ fs.readFile("../http/data.json",(err,data)=>{ if(!err){ res.writeHead(200,{"Content-type":"application/json;charset=utf8"}) res.end(data); } }) } } }).listen(9000)