目录
1,模块简介
模块:包含用于特定功能的类或函数库。
模块可以相互加载,并可以使用特殊的指令export
和 import
来交换功能,从另一个模块调用一个模块的函数:
export (导出)关键字标记了可以从当前模块外部访问的变量和函数。
import (导入)关键字允许从其他模块导入功能。
1.1,核心功能
- 始终使用 “use strict”
模块始终在严格模式下运行。 - 模块级作用域
一个模块中的顶级作用域变量和函数在其他脚本中是不可见的。
模块应该 export 它们想要被外部访问的内容,并 import 它们所需要的内容。
2,fs(文件)模块
2.1,fs.writeFileSync方法
fs.writeFileSync:同步写入,用于把一段文本写入到一个文件中。
1参:文件路径,
2参:当前写入的文本,文件存在则会被覆盖掉,如果不存在就创建并写入。
//导入模块
var fs = require("fs");
fs.writeFileSync("./one.txt","ok");
// fs.writeFileSync()同步
// fs.writeFileAsync()异步
2.2,fs.writeFile
fs.writeFile:写入文件
1参:文件路径,
2参:写入的内容,
3参:写入结束的回调函数,
回调函数有一个参数,如果任务完成,则为空,如果任务失败,则会返回失败原因。
fs.writeFile("./123.txt","今天晚上下雨了",function(error){
console.log(err)
}
2.3,fs.readFileSync
fs.readFileSync:同步读取。
fs中的方法,都分为两个版本的,同步版和异步版(sync)。
fs.readFileSync:同步版的读取文件方法,参数是要读取的文件的路径。返回值就是读取到的内容。
var content = fs.readFileSync("./123.txt");
/*
读取到的内容不是字符串,而是原始数据, 类型是buffer,可以调用buffer对象的toString()方法转为字符串。
*/
content.toString()
2.4,fs.readFile
fs.readFile:异步读取。
1参:读取的文件路径,
2参:文件读取结束后的回调函数。回调函数有两个参数:
1参:错误信息,如果没错则为空,
2参:读取到的内容。
fs.readFile("./123.txt",function(err,data){
if (err) {
console.log(err);
} else {
console.log(data.toString());
}
});
2.5,fs.mkdir
fs.mkdir:制作文件夹。
1参:创建的文件夹的路径,
2参:创建之后的回调函数。
fs.mkdir("./abc",function(err){}
2.6,fs.copyFile
fs.copyFile:复制文件。
1参,需要复制的文件,
2,复制到哪里去,
3,复制完毕之后回调的函数,
fs.copyFile("./123.txt","./abc/456.txt",function(err){}
//fs.unlink:文件删除。
fs.unlink("./abc/456.txt",function(err){}
同步与异步
同步:代码占用主线程,是阻塞的状态,直到任务结束之后才会打开线程。
异步:分线程:任务是在后台执行,不会阻塞当前代码,当前代码立刻可以执行,所以异步函数一般都会有一个回调的函数,当异步功能完毕之后回到主线程。
文件操作为什么会有异步?
文件操作在写入的时候,耗时不确定,磁盘的写入速度,文件的大小等等都会影响到文件写入速度,如果使用同步容易造成堵塞,反映到程序上来说,会出现卡顿,在使用的时候尽量使用异步函数。定时器也是一个异步函数。
3,path模块
path模块:设置路径。
绝对路径:有完整的路径,以盘符开头
相对路径:不完整的路径,只记录路径结尾部分,忽略层级关系
3.1,path.join
path.join方法:将2个路径合并一个。
// ./代表当前目录 ../表示上层目录
// __dirname:表示当前文件所在的绝对路径
let p3 =path.join(p1,p2);
3.2,path.resolve
path.resolve:把文件的相对路径转成绝对路径。
console.log(path.resolve(p4));
//path.extname:获得当前文件的扩展名
console.log(path.extname(p4));
//path.basename:获得当前文件的文件名
console.log(path.basename(p4));
4,url模块
url模块:统一资源定位符。
url组成:
1,协议名:http,ftp,udp,mail,
2,域名或ip:com(顶级商业域名),cn(国家域名),edu(教育域名)。ip:127.0.0.1(本机ip),
3,端口号:8080,8088.3306,7215,
4,路径:相对路径和绝对路径,
5,参数:name,id,psw
6,哈希值
/*
* http://www.baidu.com:80/music/asd/asdf?name=sun&age=3#3333
* http:// 协议名
* www.baidu.com 域名
* :80 端口号
* /music/asd/asdf 路径
* ?name=sun&age=3 参数
* #3333 哈希值
*/
/* url也分绝对地址和相对地址
url模块可以把一个url路径转换成一个url对象*/
var userObj =url.parse(urlStr);
5,模块化
定义:把一个庞大的功能拆分成若干个小的功能,每个功能是一个独立的模块,使用的时候导入。
好处:提高代码的复用。
导出的数据可以是任意类型,导出的数据是什么类型,导入的时候就是对应的类型。
module.exports只能导出一套数据,如果文件里面有多个数据,可以把这些数据封装成为一个大的对象,
module.exports ={num,str,arr,obj,js2Str}