1.模块化
1.
node
有模块化的概念2.
node
有npm
(node package manager)包管理器.支持模块化,对模块进行管理
node
把每一类功能都封装成了一个个模块,如果需要享用某个功能,引入 对应的模块就可以实现某一类效果;
例如:http
模块后台服务器的搭建fs
模块 对文件的操作等
2.http模块
1.主要作用创建服务器
// 1. 引入`http`模块 const http = require('http') // 2. 搭建服务器 事件驱动的 是个回调函数 let server = http.createServer(function (req, res) { // 设置响应的编码格式 res.writeHead(200, { "content-type": "text/html;charset=utf-8" }); res.end('响应结束'); }) // 3. 设置监听端口 server.listen(6789)
3.运行查看效果
1.1vscode
装coder runner
插件
1.2.在刚才的js文件右键 Run Code
1.3. 地址栏输入地址,刚才上面监听的端口保持一致 http://localhost:6789/
2.任意的终端形式, 进入在当前文件的根目录node 文件名 回车
2.1地址栏输入地址,刚才上面监听的端口保持一致 http://localhost:6789/
4.fs readFile
专门处理文件的模块
路径不用
__dirname
也可以,默认是根目录,自己拼接路径也行
const fs = require('fs'); // 路径 编码 回调函数 node里面基本都是回调函数 fs.readFile(__dirname +'/book.txt', "utf-8", function (err, data) { if (err) { console.log("err", err); } else { console.log(data) } })
boot.txt 和当前的文件同级 里面内容随便写
5.nodemon
运行查看效果nodemon
文件名 回车
npm install -g nodemon
如果上面安装不成功 进行下面的操作,在重复上边的
npm config set registry https://registry.npm.taobao.org
安装淘宝镜像
npm config get registry
查看是否成功 返回 https://registry.npm.taobao.org/ 代表成功
1.管理员身份打开Powershell
2.输入set-ExecutionPolicy RemoteSigned
3.选Y或A
ctrl+shif+enter 回车管理员
6.fs writeFile
// 第一个参数是 路径 // 第二个参数是 写入的数据 // 第三个参数是 配置信息 // 第四个参数是 回调 // flag:"a" 追加写入,每次在之前内容的基础上,写入新的内容; // flag:"w" 覆盖写入,每次写入新的内容 var str = "帘卷西风,人比黄花瘦" fs.writeFile(__dirname+"/book.txt",str,{ encoding:"utf8", flag:"a" },function(err){ if(err){ console.log("写入失败:",err); return } console.log("写入成功"); })
7. 拷贝, 备份
fs.readFile(__dirname+"/book.txt","utf-8",function(err,data){ if(err){ console.log("读取失败",err); return; } // 如果没有这个文件 会自己创建这个文件 fs.writeFile(__dirname+"/copy-2.txt",data,{ flag:"w", encoding:"utf-8" },function(err){ if(err){ // 每次都记录 错误信息 方便以后查看 return console.log("拷贝失败:",err); } console.log("拷贝成功"); }) })
8.fs读写流
stream
流 如果要处理一些大内存的文件,那么使用writeFile和readFile,就会出现内存爆仓;处理大内存的文件读写时,使用stream流处理;原理:将一个文件分成一个个的小文件来处理,每次读取64KB;
const fs = require('fs'); // 创建一个读入流 let readF = fs.createReadStream(__dirname+"/2.jpeg") // 创建一个写入流 存入位置 新建一个文件 let writeF = fs.createWriteStream("./new_3.jpeg") //用来记录我们读入的次数 let count = 0; // on(data,fn) // 监听数据的 读取 readF.on("data",function(chunk){ count ++ console.log("每次读取的数据",chunk);//每次读取的64kb console.log("次数",count); // 写入 writeF.write(chunk,function(err){ if(err){ return console.log("写入错误"); } console.log("写入成功"); }) }) readF.on("end",function(){ console.log("读取完毕"); })
9.stream 的封装
//创建一个可读流 let readF2 = fs.createReadStream("./girl.jpg"); let writeF2 = fs.createWriteStream("./imgs/boy.jpg"); //写入文件 readF2.pipe(writeF2); //或者简写 fs.createReadStream("./girl.jpg").pipe(fs.createWriteStream("./imgs/jinlong.jpg"));
10.目录
创建目录
//创建目录 // 参数1:创建目录路径 // 参数2:权限,由四个数字组成 // 0XXX 后三位分别代表 用户权限 组权限 所有者权限 // 1 --- 执行 // 2 --- 写 // 4 --- 读 // 1 + 2 + 4 = 7 代表读写 fs.mkdir("./imgs",0777,function (err) { if (err){ return console.error(err); } console.log("创建目录成功"); });
读取目录
fs.readdir("./imgs",function (err,files) { if (err){ return console.error(err); } console.log(files);//返回的数组,存储的是该目录下的文件名 })
查看目录下的文件或者目录详情
fs.stat("./imgs",function (err,stat) { if (err){ return console.error(err); } console.log(stat); }) fs.stat("./2.jpg",function (err,stat) { if (err){ return console.error(err); } console.log(stat); })
查看目录或者文件是否存在
fs.exists("./imgs/3.jpg",function (bol) { console.log(bol); })
通过相对路径获取绝对路径
fs.realpath("./imgs/3.jpg",function (err,path) { if (err){ return console.error(err); } console.log(path); })
修改文件名
参数1:之前的名字
参数2:要修改的名字
fs.rename("./2.jpg","./girl.jpg",function (err) { if (err){ return console.error(err); } console.log("修改文件成功"); })
11. events模块
事件模块
*/ // 1. 引入 // Emit 触发 发生 const eventEmittor = require('events'); // 2. 创建事件监听对象 let event = new eventEmittor(); /* 监听事件 on(事件名,回调) */ event.on("studyNode", function () { console.log("旅行事件被触发") }); // 触发事件 setTimeout(() => { event.emit("studyNode") }, 5000);