1.fs
1>文件操作
一:读取文件
异步读取
fs.readFile("1.txt", "utf-8", function (err, data) {
if (err) {
console.error(err);
return;
}
console.log(data);
});
para1:path
para2:encoding
para3:cb(err,data)
无返回值
同步读取
var data = fs.readFileSync("1.txt", "utf-8");
console.log("data: " + data);
para1: path
para2: encoding
有返回值
二:写入文件
>whiteFile
fs.writeFile("2.txt", "哈哈哈哈哈哈哈哈,我会进入文件中", {
flag: "a"
}, function (err) {
if (err) {
console.error(err);
return;
}
console.log("文件写入成功");
});
param1: path
param2: content
param3: options
-- flag: a 追加
-- flag: w 写入
param4: cb(err)
> appendFile
fs.appendFile("3.txt", "家乐福卡的设计费可拉伸的机发送的", function (err) {
if (err) {
console.log(err);
return;
}
console.log("文件写入成功");
});
param1: path
param2: content
param3: cb(err)
拓展---复制文件
var fs = require('fs');
fs.readFile("index.html", "utf-8", function (err, data) {
if (err) {
console.error(err);
return;
}
// 写入文件
fs.writeFile("index4.html", data, {
flag: "w",
encoding: "utf-8"
}, function (err) {
if (err) {
console.error(err);
return;
}
console.log("文件赋值成功");
});
});
2>目录操作
>创建目录
var fs = require('fs');
fs.mkdir("dirName", 0777, function (err) {
if (err) {
console.error(err);
}
});
param1: dirname
param2: 0777
-权限问题(扩展)
--mode 三个数字,分别代表owner(所有者),group(组用户),others(其他用户)所具有的权限
---1 = x 执行
---2 = w 写入
---4 = r 读
---比如owner所具有的权限: 1 + 2 + 4 = 7
param3: cb(err)
读取目录readdir
>```
var fs = require('fs');
fs.readdir("test", function (err, files) {
if (err) {
console.error(err);
return;
}
// files为一个数组,保存所有文件的名称
console.log(files);
});
param1: dirname
param2: cb(err, cb)
判断文件是否存在exists
var fs = require('fs');
fs.exists("test/test7", function (res) {
console.log(res);
});
param1: dirname
param2: cb(res)
查看目录或者文件详情stat
>```
var fs = require('fs');
fs.stat("test/hah.txt", function (err, stat) {
if (err) {
console.error(err);
return;
}
console.log(stat);
});
param1: dirname
param2: cb(err, stat)
修改文件名rename
var fs = require('fs');
fs.rename("test", "testttttttt", function (err) {
if (err) {
console.error(err);
return;
}
console.log("名称修改成功");
});
param1: oldname
param2: newname
param3: cb(err)
相对路径获取绝对路径realpath
>```
var fs = require('fs');
fs.realpath("test", function (err, path) {
if (err) {
console.error(err);
return;
}
console.log(path);
});
param1: dirname
param2: cb(err)
2 util
1.类型验证
console.log(util.isArray([])); // 验证数组
console.log(util.isRegExp(/\d/)); // 验证正则表达式
实现继承
继承原型中的内容,而不继承自身的内容
util.inherits(class, superClass);
// 实现继承
function Person() {
this.name = "哈哈";
this.age = 30;
this.say = function () {
console.log(this.name);
};
}
Person.prototype.showAge = function () {
console.log(this.age);
};
function Student() {
Person.apply(this, arguments);
this.name = "呵呵";
}
// 实现继承
util.inherits(Student, Person);
Student.prototype.show = function() {
console.log("haha");
};
var personObj = new Person();
var studentObj = new Student();
studentObj.say();
studentObj.showAge();
studentObj.show();
3.events
获取事件模块
var events = require('events').EventEmitter(); // 旧的写法
var events = require('events'); // 新的写法
绑定事件
obj.on(“eventName”, function);
obj.addListener(“eventName”, function);
触发事件
obj.emit(“eventName”);
绑定只会触发一次的事件
obj.once(“eventName”, function);
girl.once("die", function () {
console.log("哈哈哈");
});```
#4.buffer类
缓存区:暂时存放内存里的一段数据
JS自身只有字符串,没有二进制类型在处理文件流时,需要使用二进制数据,因此Node中,定义了一个buffer类
由一个八位字节一个字节元素组成的数组,单位用16进制表示,取值范围为0-255
buffer对象相关方法
1.创建长度为12buff
>// 创建长度为12的数组
var buff = new Buffer(12);
// (填充的值,开始位置,结束位置(没有既全部))
buff.fill(255, 0, 4);
console.log(buff);
2通过数组创建
>var buff = new Buffer([1, 2, 3]);
console.log(buff);
3通过字符串创建
>var buff = new Buffer("李大泽");
console.log(buff);
4将buff转为字符串
>var buff = new Buffer([0xe6, 0x9d, 0x8e, 0xe5, 0xa4, 0xa7, 0xe6, 0xb3, 0xbd]);
console.log(buff.toString());
5.buff连接
var buff1 = new Buffer([0xe6, 0x9d, 0x8e, 0xe5]);
var buff2 = new Buffer([0xa4, 0xa7, 0xe6, 0xb3, 0xbd]);
var buff3 = Buffer.concat([buff1, buff2]); // 连接两个buff,但是会占用过高内存
console.log(buff1.toString());
console.log(buff2.toString());
console.log(buff3.toString());
// Node中推荐的方式
var StringDecoder = require('string_decoder').StringDecoder;
var decoder = new StringDecoder();
console.log(decoder.write(buff1));
console.log(decoder.write(buff2));
#5.stream
---简介
Stream与大数据处理密不可分
之前的文件拷贝,看似没问题,但是对于大文件,会产生内存占用过高问题
var fs = require('fs');
function copy(src, dest) {
fs.writeFile(dest, fs.readFileSync(src));
}
copy("data.json", "dataStream.json");
---解决的问题和方法
内存爆仓
`写入数据跟不上读取速度,写入和读取的速度不一致,未被写入的数据在内存中不断扩大,就会出现内存爆仓`
创建 readStream 和 writeStream,将文件作为一小块一小块的数据流进行处理,而不是一整块技术
var fs = require('fs');
var rs = fs.createReadStream("data.json");
var ws = fs.createWriteStream("data2.json");
rs.on("data", function (chunk) {
console.log("数据读取中。。。。");
ws.write(chunk, function () {
console.log("数据写入成功");
});
});
rs.on("end", function () {
console.log("数据读取完毕");
});
`fs.createReadStream()`
`fs.createWriteStream()`
---pipe
var fs = require('fs');
var rs = fs.createReadStream("data.json");
var ws = fs.createWriteStream("data3.json");
rs.pipe(ws);
连接两个数据流,犹如导管一样将数据读入写入
`rs.pipe(ws);`
#6.http
---主要用于搭建HTTP服务器和客户端
---http: 超文本传输协议
---常用api
----创建服务器
var http = require('http');
http.createServer(function (req, res) {
var urlStr = req.url; // 获取请求的路径
var urlMethod = req.method; // 获取请求的方法
console.log(urlStr);
console.log(urlMethod);
res.end();
}).listen(8888, function (err) {
if (err) {
console.error(err);
return;
}
console.log("服务器启动成功");
});
createServer
listen
处理请求
var http = require('http');
var url = require('url');
http.createServer(function (req, res) {
var urlStr = req.url;
var methodStr = req.method;
// console.log(req.headers); // 获取请求头
// console.log(req.httpVersion); // 获取http版本
/*
* 获取GET请求的参数
// 使用url模块对url进行解析
var urlObj = url.parse(urlStr, true);
// 获取get参数
console.log(urlObj.query.name);
*/
// 获取POST请求的参数
req.on("data", function (chunk) {
console.log(chunk.toString());
});
res.writeHead(200, {"Content-Type": "text/html;charset=utf-8"});
res.end();
}).listen(8888, function (err) {
console.log("服务器启动成功");
});
获取get请求的参数
var urlObj = url.parse(urlStr, true);
console.log(urlObj.query);
获取post请求的参数
req.on("data", function (chunk) {
console.log(chunk.toString());
});
网页中实现请求的发送
var http = require('http');
var url = require('url');
var fs = require('fs');
http.createServer(function (req, res) {
var urlStr = req.url;
var urlObj = url.parse(urlStr, true);
var method = req.method;
var pathname = urlObj.pathname;
if (pathname == "/login.html") {
fs.readFile("login.html", function (err, data) {
res.write(data);
res.end();
});
} else if (pathname == "/test") {
// console.log(urlObj.query);
req.on("data", function (chunk) {
console.log(chunk.toString());
});
res.end();
}
}).listen(8888, "localhost", function (err) {
if (err) {
console.error(err);
return;
}
console.log("服务器启动成功");
});;
get & post请求