zoukankan      html  css  js  c++  java
  • 【SRH】------node中的常用核心模块及方法

    
    
    常用的5个核心模块
    http    url    querystring     fs       events
    
    1.    http
    
    http.createServer 创建服务器, 回调函数中有2个参数
            1、req:request()  请求,只能在服务端看到
            2、res:response()  给客户端的回复,在客户端看到
    
            req参数:
                req.url  获取请求的地址
                eg:http://www.baidu.com/api/list?a=23&b=f,则req.url为/api/list
    
                req.method 请求的方式get/post
    
    
            res参数:
                res.end  结束回复 ,向客户端发送最后一次信息(必须的,否则服务器就会一直运行)
                
                res.statusCode  设置状态码
                该属性控制响应头刷新时将被发送到客户端的状态码。
                
                res.write()  回复内容
                res.writeHead() 设置状态码和返回文件的类型
                res.setHeader()  设置返回文件的类型
    
    http.get(url,(res)=>{})//请求数据
    参1:请求的地址,不能以https开头
    参2:回调函数,参数为responose
    res.statusCode获取服务器响应的状态码,200代表成功
    res.on("data",(data)=>{    })
    res.on("end",()=>{})
    
    创建服务器
    //引入核心模块http
    const http =  require('http');
    //创建服务器
    http.createServer((req,res)=>{
    
        //设置请求成功的状态码,类型,charset=utf8解决乱码问题
        res.writeHead(200,{"content-type":"text/plain;charset=utf8"});
    
        //向客户端发送最后一次信息(必须的,否则服务器就会一直运行)
        res.end("还好");
    
    }).listen("3000")//设置端口号
    
    最简单的服务器,在终端运行js文件(node 文件名),在浏览器中输入localhost 端口号,即可
    
    请求数据
    const http = require("http");
    const cheerio = require("cheerio");
    const fs = require("fs");
    
    //http.get()不能请求以https://开头的路径
    http.get("http://www.mobiletrain.org/?pinzhuanbdtg=biaoti", (res) => {
        //判断是否请求成功(res.statusCode获取响应的状态码,200代表成功)
        if (res.statusCode == 200) {
            let str = "";
            //当获取到数据的时候会对数据进行一块一块的接收 res.on()为绑定事件的方法 data是事件,回调函数中的data为接收到的每块的数据
            res.on("data", (data) => {
                str += data;
            })
    
            //end为事件,res 是个writable的流,当writable流接收到 null 的时候会触发 end 事件即给客户端的东西写完了,可以发送给客户端了
            res.on("end", () => {
                //将字符串加载到$符号中这样就可以用来操作元素
                let $ = cheerio.load(str);
                let list = $(".ul1").children();
                let data = "";
                for (var i = 0; i < list.length; i++) {
                    data += list.eq(i).find("span").text() + "
    ";
                }
                fs.writeFile("./data.txt", data, () => {})
            })
        }
    })
    
    2    url
    
    
    u
    rl.parse()
        将一个url转换成一个urlObject
        参1:url
        参数2:是一个布尔值  如果填true的话,会将query字符串解析成query对象
        地址栏中?后面的部分是query的部分
    
    
    url.format() 将一个url Objet转换一个url
    
    url.resolve()  生成一个相对路径或者绝对路径
    
    console.log(url.resolve("/a/b/c","/d"))//绝对路径  将所有的都替替换,结果为:/d
    console.log(url.resolve("/a/b/c","d"))//生成相对路径   只将最后一个替换,结果为:/a/b/d
    
    3    querystring
    querystring.parse() 将字符串转换为对象
    参数1 字符串
    参数2 分割符
    参数3 赋值符
    
    querystring.stringify() 将对象转换成字符串(是转义后的字符串,需要进行反转义)
    参数1 对象
    参数2 分割符
    参数3 赋值符
    
    querystring.escape()转义
    
    name   =   a=b=c
    key         val
    
    name=a=b   =   c
    key             val
    
    
    querystring.unescape() 反转义
    
    eg:
    const querystring = require("querystring");
    let str = "name+李想*age+18*sex+美女";
    let obj = querystring.parse(str,"*","+");
    //console.log(querystring.stringify(obj,"%","$"))
    
    let str1 = "a=b=c";
    let val = querystring.escape(str1);
    
    let key = "name="+val;
    console.log(querystring.unescape(val))
    
    4    fs {读取到的文件默认是buffer类型)
    
    
    const fs = require("fs");
    
    stat:检查文件的类型
        fs.stat("./002url.js",(err,starts)=>{
            starts.isFile()//判断当前文件是否是一个文件
            starts.isDirectory():判断当前文件是不是一个目录
    
        })
       
    -----------------------------    
        eg:
        fs.stat("./002url.js",(err,starts)=>{
            console.log(starts.isFile())
            console.log(starts.isDirectory())
        })
    
    ------------------------------------------------
    fs.mkdir();创建文件夹
        参数1:文件路径
        参数2:回调
    -----------------
        eg:
        fs.mkdir("./abc",(err)=>{})
    
        fs.mkdirSync() 同步
    --------------------------------------------------------
    
    fs.writeFile(); 创建并写入文件
        参数1:文件路径
        参数2:写入文件的内容
        参数3 回调()
    
        fs.writeFile("./abc/data.txt","1234",()=>{})
    ----------------------------------
    fs.readFile()
        参数1:文件路径
        参数2:回调  有两个参数,err  data
    
        fs.readFile("./abc/data.txt",(err,data)=>{
            console.log(data+"");
        })
    
        Sync:同步
    
        //console.log("1111")
        //读取到的文件默认是buffer类型
    ------------------------------------------------
    fs.rename()  重命名
        fs.rename("./data.txt","./page.txt",(err)=>{})
    
    
    ---------------------------------------------------------
    fs.readdir():列出文件的目录
        参数1:文件路径
        参数2:回调函数  err  list
    
        fs.readdir("../demo",(err,list)=>{
        console.log(list)
    })
    
    5    events
    //引入了核心模块
    const EventEmitter = require("events");
    
    //继承了EventEmitter当前类的属性和方法
    class MyEmitter extends EventEmitter{};
    //实例化
    const myEmitter = new MyEmitter();
    
        on:绑定事件
            参数1:事件名称
            参数2:回调函数(事件对应的函数)
    
        emit:触发事件及事件对应的方法
            参数1:事件名称(要和on绑定的事件一致)
            参数2:需要传递的参数
    
        once:绑定事件,但仅能触发一次方法
    
        removeListener() 解除绑定
            参数1:事件名称
            参数2:解绑的函数
    
        removeAllListeners()解绑全部
            参数1:事件名称
     ---------------------------------------------------------      
    eg:
    //引入了核心模块
    const EventEmitter = require("events");
    
    //继承了EventEmitter当前类的属性和方法
    class MyEmitter extends EventEmitter{};
    //实例化
    const myEmitter = new MyEmitter();
    
    function fn(val){
        console.log(""+val);
    }
    
    function fn1(val){
        console.log(""+val);
    }
    function fn2(val){
        console.log(""+val);
    }
    
    myEmitter.on("change",fn);
    myEmitter.on("change",fn1);
    
    //把当前事件放在队列的最前面优先执行
    myEmitter.prependListener("change", fn2);
    
    
  • 相关阅读:
    Android 4.3 系统裁剪——删除不使用的app及添加自己app
    poj Muddy Fields
    在一台服务器上搭建相对高可用HiveServer实践
    HashMap在并发场景下踩过的坑
    搜索实时个性化模型——基于FTRL和个性化推荐的搜索排序优化
    关于扁平化视觉设计趋势的一些小分享
    如何从“点子”落地到“执行”?—完整解析1个手游传播类mini项目的进化
    网站规划通识:原型图绘制的一些注意事项
    内容社交产品中的关键数据——获得良好反馈的用户比例
    白木彰:具有普遍性的设计力
  • 原文地址:https://www.cnblogs.com/SRH151219/p/10199001.html
Copyright © 2011-2022 走看看