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 支持 若干个事件监听器。当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作 为回调函数参数传递

posted @ 2022-05-09 20:57  真的想不出来  阅读(338)  评论(0编辑  收藏  举报