node学习--常用模块
Node的用处在于它本身提供的一系列的功能模块,用于与操作系统互动。常用内置模块如下:
path:处理文件路径
fs: 操作文件系统
child_process: 新建子进程
util: 提供一系列的实用小工具
http: 提供HTTP服务器功能
url:用于解析URL
querystring:解析URL中的查询字符串
crypto:提供加密和解密功能
注:包名如果跟内置模块重名,会优先加载内置模块,最好不要重名
在D:nodejs/node/1.js 新建一个1.js文件
1.在path文件操作的过程中,都必须使用物理路径(绝对路径)
常用的方法:
.join() 拼合路径
举例:
const path = require("path"); const temp = path.join('/bar','foor','/read/user'); console.log(temp); // 输出 \bar\foor\read\user const temp1 = path.join(__dirname,'李白.txt'); // __dirname 这个js文件所在的路径,不包括 /fileName.js 这部分 console.log(temp1); //输出 D:\nodejs\node\李白.txt
.basename() 获取文件路径下这个文件的名字
const temp1 = path.join(__dirname,'李白.txt'); console.log(path.basename(temp1)); //输出 李白.txt console.log(path.basename(temp1,'.txt')) // 输出不带后缀名的文件名 输出 李白
其实相当于切掉最后一块
console.log(path.basename(temp1,'t')) //输出 李白.tx
属性 .delimiter 获取不同操作系统中默认的路径分隔符 windows是; Linux是:
const path = require("path");
console.log(path.delimiter); //这里用windows 输出为 ;
//process.env 获取环境变量 ,其中有个path对象,得到环境变量的路径将其分隔 console.log(process.env.PATH.split(path.delimiter));
.dirname() .extname()
const path = require("path");
const temp1 = path.join(__dirname,'李白.txt');
//获取文件目录名称
console.log(path.dirname(temp1)); //输出 D:\nodejs\node
//获取文件中的扩展名
console.log(path.extname(temp1)); //输出 .txt
.parse() 将 一个路径字符串转化为一个对象(包含文件目录,文件名,扩展名)
.format() 将文件对象转换为字符串
const path = require("path");
const temp1 = path.join(__dirname,'李白.txt');
console.log(path.parse(temp1));

const path = require("path");
const temp1 = path.join(__dirname,'李白.txt');
const obj = path.parse(temp1);
console.log(path.format(obj));

isAbsolute() 判断一个路径是不是绝对路径,返回值是true/false
const path = require("path");
const temp1 = path.join(__dirname,'李白.txt');
console.log(path.isAbsolute(temp1)); //true
console.log(path.isAbsolute("../etc/isAbsolute")); //false
2.文件操作 fs
readFile() 异步读取文件 readFile()
读取文件时没有指定编码默认读取的是一个Buffer(缓冲区),缓冲区就是内存中操作数据的容器,通过缓存区可以很方便的操作二进制数据,而且大文件操作时必须有缓存区。因为在Node中操作数据、网络通信是没有办法完全以字符串的方式操作的,所以用node实现了缓存区。
举例:
const path = require("path");
const temp1 = path.join(__dirname,'李白.txt');
const fs = require('fs');
fs.readFile(temp1,'utf-8',(error,data) => { //加上编码,以文本方式读取,不会输出16进制
console.log(data);
});
文件编码:windows 默认是gbk编码,但是 node不支持,统一使用utf-8编码
文件太大,读文件会出现卡顿,可以使用readline 模块
const path = require("path");
const temp1 = path.join(__dirname,'李白.txt');
const fs = require('fs');
const readline = require('readline');
//以流的方式读取文件
let streamReader = fs.createReadStream(temp1);
let data = '';
streamReader.on('data',(chunk) => {
//chunk只是文档的一个片段,不完整
data += chunk.toString();
});
streamReader.on("end",() => {
//通知你已经结束了,此时data是完整的
console.log(data);
})
输出为:

单行读取文件
const path = require("path");
const temp1 = path.join(__dirname,'李白.txt');
const fs = require('fs');
const readline = require('readline');
let streamReader = fs.createReadStream(temp1);
//利用readline 读取
let rl = readline.createInterface({
input:streamReader
});
rl.on("line",(line) => {
console.log(`单行的内容为:${line}`);
})
输出为:

写文件 的三种方式 ,写文件默认会将原来的内容替换掉。可以追加appendFile()
//1.writeFile JSONstringfy() 序列化 JSONparse()反序列化
const path = require("path");
const temp1 = path.join(__dirname,'李白.txt');
const fs = require("fs");
fs.writeFile(temp1,JSON.stringify({id:10,name:"2333"}),(err)=>{
if(err){
console.log("error");
}else{
console.log("success");
}
})
//2 fs.writeFileSync() //3 fs.createWriteStream() const path = require("path"); const temp1 = path.join(__dirname,'李白.txt'); const fs = require("fs"); let streamWrite = fs.createWriteStream(temp1); streamWrite.write("hello",(err)=>{ if(err){ console.log("error"); }else{ console.log("sucess") } })
3.url
处理HTTP请求时url模块使用率超高,因为该模块允许解析URL、生成URL,以及拼接URL.

.parse()方法来将一个URL字符串转换为URL对象
var url = require('url'); var urlObject = url.parse("http://user:pass@host.com:8080/name?query=string$hash"); console.log(urlObject);

format()方法允许将一个URL对象转换为URL字符串.
console.log(url.format(urlObject));
输出:http://user:pass@host.com:8080/name?query=string$hash
.resolve()方法可以用于拼接URL
var url = require('url');
var urlObject = url.resolve("http://user:pass@host.com",'../bar/name');
console.log(urlObject);
输出http://user:pass@host.com/bar/name

浙公网安备 33010602011771号