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)


 

posted @ 2019-03-06 08:44  一直敲敲敲  阅读(303)  评论(0编辑  收藏  举报