• nodejs 内置模块"queryString"、"path"、"url"、"fs"、"http"、"jade"、"until"、"events"


    1、"queryString" 和 "qs"

    1. "qs" 是 npm 模块npm install qs,"queryString" 是 nodejs 内置模块。
    2. querystring的解析会忽略内置对象,qs的解析会更加面向对象。
      举例解释:
    const qs=require('qs')
    const querystring=require('querystring')
    
    let obj={name:'john',
        favs:['a','b'],
        address:{city:'dd'},
        friends:[{name:'tom'},{name:'jonny'}]
    }
    
    let ss1=querystring.stringify(obj)
    let ss2=qs.stringify(obj)
    
    console.log(ss1)// 内置对象的信息将全部丢失
    console.log(decodeURIComponent(ss2))// 将会被编码,所以进行解码
    
    let objClone=qs.parse(ss2)//
    console.log(objClone.friends[0].name)
    /* 结果
    name=john&favs=a&favs=b&address=&friends=&friends=
    name=john&favs[0]=a&favs[1]=b&address[city]=dd&friends[0][name]=tom&friends[1][name]=jonny
    tom
    */
    

    "qs"

    import { stringify, parse } from 'qs';

    • stringify 将 对象 转成 查询字符串
    • parse 将 查询字符串 转成 对象

    使用举例:

    import { stringify } from 'qs';
    let Url = "/address/xxx/xxx"
    const params = {
      key: value,
      key2: value2
    };
    let url = `${Url}?${stringify(params)}`
    console.log(url) // "/address/xxx/xxx?key=value&key2=value2"
    

    "queryString"

    const { stringify, parse } = require('querystring');
    queryString.parse(str, [sep], [eq], [options])
    接收一个 URL 为参数,将 URL 中的查询信息,一对象的形式返回。如果有同一个查询信息有多个值,这些值将以数组的形式呈现。

    • str 要解析的网址查询字符串
    • sep 用于在查询字符串中分隔键值对的子字符串。 默认值: '&'。
    • eq 用于在查询字符串中分隔键和值的子字符串。 默认值: '='。
    • options
      • decodeURIComponent 当对查询字符串中的百分比编码字符进行解码时使用的函数。 默认值: querystring.unescape()。
      • maxKeys 指定要解析的最大键数。 指定 0 以删除键的计数限制。 默认值: 1000。

    2、"path"、__dirname

    用于处理文件和目录的路径

    • path.normalize(路径解析,得到规范路径);
    • path.join(路径合并);
    • path.resolve(获取绝对路径);
    • path.relative(获取相对路径)。

    使用举例:path.resolve(__dirname, replaceStr)__dirname是node内置对象,代表当前环境路径.方法用于将replacestr添加到指定路径的后面

    const path = require('path');
    var rs = path.resolve(__dirname,"!!!replace!!!")
    console.log(rs);//D:\part3\day0316\server\!!!replace!!!
    

    3、"url"

    url模块常用于请求地址解析

    usr.parse(url, bool)

    仅当二参为true,则将url中的get请求参数解析成对象放在query属性中

    const url = require('url');
    const strUrl1 = 'http://www.lagou.com/a/b?name=zhangsan&pswd=123456';
    var rs1 = url.parse(strUrl1);
    var rs2 = url.parse(strUrl1,true);//true把get请求参数解析成对象
    console.log(rs1);
    console.log(rs2);
    

    url.format(paramobj)

    根据参数对象生成url

    const url = require('url');
    var params = {
        protocol:'https:',
        host:'www.lagou.com',
        hash:'#position',
        search:'?name=zhangsan%age=27',
        pathname:'/a/b'
    }
    //根据参数对象生成路径
    var rs = url.format(params);
    console.log(rs);//https://www.lagou.com/a/b?name=zhangsan%age=27#position
    

    url.resolve(url,replaceStr)

    替换url第一个/后的内容

    const url = require('url');
    const strUrl = 'http://www.lagou.com/a/b?name=zhangsan&pswd=123456';
    console.log(url.resolve(strUrl,'!!!replace!!!'));//http://www.lagou.com/a/!!!replace!!!
    

    4、"fs"

    文件操作系统的API

    • fs.readFile(filename,[options],callback); 读取文件。
    • fs.writeFile(filename,data,[options],callback);写文件。
    • fs.appendFile(filename,data,[options],callback);以追加的方式写文件。
    • fs.open(filename,flags,mode,callback); 打开文件。
      • filename:文件名,必须。
      • data:写入的数据或者buffer流。
      • flags:操作标识,打开方式,r w。
      • [options]:指定权限,读、写、执行。是否可续写。
      • callback:读取文件后的回调函数。function(err,data);
    • fs.mkdir(path,mode,callback);创建目录。
    • fs.readdir(path,callback);读取目录。
    • fs.exists(path,callback);查看文件与目录是否存在。
    • fs.utimes(path,atime,mtime,callback);修改文件的访问时间和修改时间。
    • fs.rename(oldfilename,newfilename,callback);重命名文件名或者目录。
    • fs.rmdir(path,callback);删除空目录。
      • path:被创建目录的完整路径以及目录名。
      • atime:新的访问时间。
      • ctime:新的修改时间。
      • oldfilename、newfilename 旧名字和新名字。
      • callback:创建完目录后的回调函数。

    使用举例:

    读文件

    const fs = require('fs'); //这样就引入了 fs 模块
    /*
    操作本地文件的就用 fs 模块
    fs.readFile(path,callback); 读取本地文件
    path:路径
    callback(error,data)   error:失败   data:读出来的文件
    */
    fs.readFile('./www/1.txt', (error, data) => {//fs.readFile(读取本地文件的'路径',(成功,失败)=>{})
        console.log(data.toString());
    });
    

    写文件

    //写文件
    let fs = request("writeFile")//写文件
    fs.writeFile('./www/2.txt','danadkjsjdksa',(error)=>{
        if(error){
            console.log('失败')
        }else{
            console.log('成功')
        }
    });
    

    删除指定的文件

    //删除指定的文件
    fs.unlinkSync('./www/2.txt');
    

    5、"http"

    创建服务器的

    • http.createServer(function(){});创建服务器。
    • http.get('路径', callback); 发送get请求。
    • http.request(options, callback); 发送请求。
      • options:options是一个类似关联数组的对象,表示请求的参数,callback作为回调函数,需要传递一个参数。
      • options常用的参数有host、port(默认为80)、method(默认为GET)、path(请求的相对于根的路径,默认是“/”。

    get:

    var http=require("http");
     var options={
        hostname:"cn.bing.com",
        port:80
    }
      
    var req=http.request(options,function(res){
        res.setEncoding("utf-8");
        res.on("data",function(chunk){
            console.log(chunk.toString())
        });
        console.log(res.statusCode);
    });
    req.on("error",function(err){
        console.log(err.message);
    });
    req.end();
    

    post:

    var http=require("http");
    var querystring=require("querystring");
      
    var postData=querystring.stringify({
        "content":"我真的只是测试一下",
        "mid":8837
    });
      
    var options={
        hostname:"www.imooc.com",
        port:80,
        path:"/course/document",
        method:"POST",
        headers:{
            "Accept":"application/json, text/JavaScript, */*; q=0.01",
            "Accept-Encoding":"gzip, deflate",
            "Accept-Language":"zh-CN,zh;q=0.8",
            "Connection":"keep-alive",
            "Content-Length":postData.length,
            "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
            "Cookie":"imooc_uuid=6cc9e8d5-424a-4861-9f7d-9cbcfbe4c6ae; imooc_isnew_ct=1460873157; loginstate=1;
             apsid=IzZDJiMGU0OTMyNTE0ZGFhZDAzZDNhZTAyZDg2ZmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
             AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjkyOTk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
             AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNmNmFhMmVhMTYwNzRmMjczNjdmZWUyNDg1ZTZkMGM1BwhXVwcIV1c%3DMD;
              phpSESSID=thh4bfrl1t7qre9tr56m32tbv0; 
              Hm_lvt_f0cfcccd7b1393990c78efdeebff3968=1467635471,1467653719,1467654690,1467654957;
               Hm_lpvt_f0cfcccd7b1393990c78efdeebff3968=1467655022; imooc_isnew=2;
                cvde=577a9e57ce250-34",
            "Host":"www.imooc.com",
            "Origin":"http://www.imooc.com",
            "Referer":"http://www.imooc.com/video/8837",
            "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) 
            AppleWebKit/537.36 (Khtml, like Gecko) Chrome/53.0.2763.0 Safari/537.36",
            "X-Requested-With":"XMLHttpRequest",
        }
    }
      
    var req=http.request(options,function(res){
        res.on("data",function(chunk){
            console.log(chunk);
        });
        res.on("end",function(){
            console.log("评论完毕!");
        });
        console.log(res.statusCode);
    });
      
    req.on("error",function(err){
        console.log(err.message);
    })
    req.write(postData);
    req.end();
    

    6、"jade"

    jade是一款高性能、简洁易懂的模板引擎。可通过jade来编写html文件。
    jade类似一个用于快速编写html的语言,其编写后的文件后缀为.jade。

    7、"until"

    弥补js功能不足,新增API。

    • util.format(格式化输出字符串);
    • util.isArray(检查是否为数组);
    • util.RegExp(是不是正则);
    • util.isDate(是不是日期型);
    • util.inherits(child,parent)实现继承;

    8、"events"

    events 模块只提供了一个对象: events.EventEmitter。
    【EventEmitter 的核心就是事件触发与事件监听器功能的封装。】
    EventEmitter 的每个事件由一个事件名和若干个参 数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter 支持 若干个事件监听器。当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作 为回调函数参数传递

  • 相关阅读:
    小米2系列板砖自救行动
    大公司都有哪些开源项目~~~阿里,百度,腾讯,360,新浪,网易,小米等
    SQLServer 2016安装时的错误:Polybase要求安装Oracle JRE 7更新51或更高版本
    异步方法不能使用ref和out的解决方法
    大公司都有哪些开源项目~~~简化版
    08.LoT.UI 前后台通用框架分解系列之——多样的Tag选择器
    07.LoT.UI 前后台通用框架分解系列之——强大的文本编辑器
    BIOS中未启用虚拟化支持系列~~例如:因此无法安装Hyper-V
    【开源】1句代码搞定图片批量上传,无需什么代码功底【无语言界限】
    06.LoT.UI 前后台通用框架分解系列之——浮夸的图片上传
  • 原文地址:https://www.cnblogs.com/MrZhujl/p/16250905.html
Copyright © 2020-2023  润新知