1、"queryString" 和 "qs"
- "qs" 是 npm 模块
npm install qs
,"queryString" 是 nodejs 内置模块。 - 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 支持 若干个事件监听器。当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作 为回调函数参数传递