node.js 基础和文件操作 笔记
-
模块化:
在node中,一个js就是一个模块。
通过require()引用外部模块。如果是相对路径,需要用./或者..来开头。
一个文件就是一个模块,有一个假想的函数包着,所以想要在外部调用,需要用export.x
-
可以引用的模块包括
- 核心模块,直接写名字就行了。
就比如fs模块
- 文件模块
-
js中的window在这里是global
-
建议用module.exports.xxx的方式,声明可以外部调用。
-
npm的一些操作
- npm -v 查看npm的版本
- npm version 查看所有模块的版本
- npm search 包名 搜索名
- npm install 包名 安装包(可以用i代替install)
- npm install 包名 --save 安装包并添加到依赖中
- npm remove 包名 删除包 (可以用r替代remove)
- npm install 下载当前项目所依赖的包
- npm install 包名 -g 全局安装包(一般都是工具)
-
Node 基础
-
缓冲区buffer的概念
var buf = Buffer.from(str); var buf2 = Buffer.alloc(10);
-
buffer的大小确定后,不会修改。
-
实际使用16进制存储的,但是输出到控制台等会现实成10进制。
-
Buffer.from(str) 将一个字符串转化为buffer
-
Buffer.toString() 将缓存区的数据转化为字符串
-
-
文件系统
-
通过node来操作系统中的文件。
-
var fs = require("fs");
-
一般都是两组,一个带sync同步,不带是异步的。
-
同步文件的写入
-
var fd = fs.openSync("xxx.txt", "w"); fs.writeSync(fd, "今天天气不错"); fs.closeSync(fd);
-
异步文件写入
- 性能相对较好
- 结果通过回调函数返回
- 回调函数两个参数:
- err 错误对象
- fd文件的描述符
- 异步在后面执行,回调函数中的代码后执行
-
//多一个回调函数 ,异步方法没有返回值 fs.open("xxx2.txt", "w",function(err, fd){ if(!err){ fs.write(fd, "今天天气不错" ,function(err){ if(!err){ .写入成功. } }); fs.closeSync(fd,function(err){ if(!err){ .文件成功关闭. } }); }else { console.log(err); } });
-
简单文件写入
-
var fs = require("fs"); fs.writeFile("hello3.txt", "这是通过writeFile写入的内容",{flag:"w"},function(err){ if(!err){ console.log("写入成功..."); } });
-
-
流式文件写入
-
适合大文件的写入
-
on(事件字符串,回调函数)
-
once(事件字符串,回调函数)绑定一个一次性的
-
var ws = fs.createWriteStream("Hello3.txt"); ws.once("open", function(){ console.log("233"); }) ws.once("close", function(){ console.log("233"); }) ws.write("通过可写流写入文件的内容"); ws.write("通过可写流写入文件的内容"); ws.write("通过可写流写入文件的内容"); ws.end(); //不要用ws.close(),拔掉水管的那一头
-
-
同步文件读取
-
异步文件读取
-
简单文件读取
var fs = require("fs"); fs.readFile("hello3.txt", function(err, data){ if(!err) { console.log(data); //也可以整合上面的writeFile } })
-
流式文件读取
-
可以分多次把一个大文件读取到内存中。
-
var fs = require("fs"); var rs = fs.createReadStream("an.jpg"); //监听流的开启和关闭 rs.once("open", function(){ console.log("可读流打开了~~~"); }); rs.once("close", function(){ console.log("可读流关闭了~~~"); }); //为data绑定事件,就可以自动运行 rs.on("data", function(){ //实现复制的效果。 ws.write(date); }); //传输数据,还可以用pipe简化 rs.pipe(ws);
-
-
文件操作的其他一些方法
-
fs.stat("a.mp3", function(err, stat){ //查看是不是文件、目录 console.log(stat.isFile()); console.log(stat.isDirectory()); }); //删除文件 fs.unlinkSync("hello.txt"); //读取当前文件目录结构 fs.readdir(".", function(err, files){ if(!err){ console.log(files); } }); //截断文件,将文件前3个留下来。 fs.truncateSync("hello2.txt", 3); //创建文件夹 fs.mkdirSync("hello"); //删除文件夹 fs.rmdirSync("hello"); //重命名,前两个是目录字符串 fs.rename("a.mp3", "笔记.mp3",function(err) { if(!err){ console.log("修改成功~~~"); } }); //监视文件的修改,回调函数,当文件发生变化的,被执行。 //运行起来,就会一直运行,不会停。 //拥有定时机制 fs.watchFile("hello2.txt",{interval:1000},function(curr, prev){ //上面两个参数,都是stat类型的。 console.log("文件发生了变化"); });
-
-
-
skr