Node.js初学小记(下)

cnpm(淘宝npm镜像)

npm太慢,可以使用国内淘宝镜像
通过cnpm命令进行使用

npm install -g cnpm --registry=http://registry.npm.taobao.org

同时npm也可以使用

node搜索包的流程

通过npm下载的包都放到了node_modules文件夹中,如果要引入我们通过npm下载的包,直接通过包名引入即可。
node在使用模块名字来引入模块时,它会首先在当前目录的node_modules中寻找是都含有该模块,如果有则直接使用,如果没有则去上一级目录的node_modules中寻找,直到找到为止。如果直到找到磁盘的根目录依旧没有找到,则报错。
在这里插入图片描述
在这里插入图片描述

Buffer缓冲区

Buffer的结构和操作方法与数组类似
数组中不能用来存储二进制的文件,而Buffer就是专门用来存储二进制数据
使用Buffer不需要引入模块,直接使用即可

var buf = Buffer.from(str);  //将一个字符串保存在Buffer中

在Buffer中存储的都是二进制数据,但是在显示时都是以16进制的形式显示的
Buffer中每一个元素的范围是从00 - ff(00000000 - 11111111)即一个字节
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
创建一个指定字节的Buffer。Buffer的大小一旦确定,则不能修改。因为Buffer实际上是对底层内存的直接操作

var buf2 = Buffer.alloc(10);//创建了一个10字节的Buffer
var buf3 = Buffer.allocUnsafe(10); //创建一个指定大小的Buffer,但是Buffer中可能含有敏感数据。
//也就是说输出值可能不是<Buffer 00 00 00 00 00 00 00 00 00 00>,而是会有之前存储的一些数据

通过索引,来操作buf2中的元素

buf2[0] = 10; //十进制
buf2[1] = 0xaa; //十六进制 
buf2[2] = 586;  //实际显示4A,只取后八位
//10 0100 1010
//   0100 1010
console.log(buf2[1].toString(16));   //只要是数字在控制台或页面中输出一定是十进制,toString()规定以几进制进行输出;这句话的意思是将buf2[1]的值以十六进制的形式输出

将一个字符串转换为Buffer

var buf3 = from(str); //将一个字符串转换为Buffer
console.log(buf3.toString());//buf.toString() 将缓冲区中的数据转换为字符。

在这里插入图片描述

文件写入

同步文件写入

fs(文件系统)-File System
文件系统简单来说就是通过Node来操作系统中的文件。Node通过fs模块来和文件系统进行交互,该模块提供了一些标准文件访问API来打开、读取、写入文件,以及与其交互。
使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载


同步和异步调用

  • fs模块中所有的操作都有两种形式可供选择:同步和异步
  • 同步文件系统会阻塞程序的执行,有人就是除非操作完毕,否则不会向下执行代码
  • 异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回
fs.close(fd,callback) //异步
fs.closeSync(fd) //同步

文件的写入

1.打开文件

fs.openSync(path[, flags, mode])
//path 要打开文件的路径
//flags 要打开文件要做的操作的类型 r:只读的 w:可写的
//mode 设置文件的操作权限,一般不传
eg:fs.openSync("hello.txt","w");
返回值:该方法会返回一个文件的描述符作为结果,我们可以通过该描述符来对文件进行各种操作

2.向文件中写入内容

fs.writeSync(fd, string[, position[, encoding]])
//fd 文件的描述符,需要传递要写入的文件的描述符
//string 要写入的内容
//position 写入的起始位置
//encoding 写入的编码,默认utf-8
eg: fs.writeSync(fd,"寄一笔春夏");

3.保存并关闭

fs.closeSync(fd)
//fd 要关闭的文件的描述符

只要有返回值一定是同步

异步文件写入

1.打开文件

fs.open(path[, flags[, mode]], callback)
//callback 回调函数
//异步调用的方法,结果都是通过回调函数的参数返回的
//回调函数有两个参数:error-错误对象,如果没有错误则返回NULL fd:文件的描述符

2.向文件中写入内容

fs.write(fd, string[, position[, encoding]], callback)

3.保存并关闭

fs.close(fd,callback)

举例:

var fs = require("fs");

var f;
//打开文件
fs.open("hello2.txt","w",function(err,fd){
    //判断是否出错
    if(!err){
        //如果没有出错,则对文件进行写入操作
        fs.write(fd,"述一集桃雾",function (){
            if(!err){
                console.log("写入成功~");
            }
            //关闭文件
            fs.close(fd,function (err){
                if(!err){
                    console.log("文件已关闭~");
                }
            })
        })
    }else{
        console.log(err);
    }
});

简单文件写入

fs.writeFile(file, data[, options], callback)
fs.writeFileSync(file, data[, options])
//file 要操作的文件的路径
//data 要写入的数据
//options 选项,可以对写入进行一些设置
//callback 当写入完成以后执行的函数 
eg:
var fs = require("fs");
fs.writeFile("hello3.txt","想养一只昆仑",function (err){
    if(!err)
    {
        console.log("写入成功~");
    }else{
        console.log(err);
    }
});

想要在原文件中添加新内容

var fs = require("fs");
//如果是要添加绝对路径的话,需要写成:C:\\Users\\DELL\\Desktop\\hello.txt (只写一个\会对后面的字母进行转义)
//也可以写成C:/Users/DELL/Desktop/hello.txt
fs.writeFile("hello3.txt","想养一只昆仑",{flag:"a"},function (err){  //flag对应的值可根据一下打开状态进行修改
    if(!err)
    {
        console.log("写入成功~");
    }else{
        console.log(err);
    }
});

在这里插入图片描述
打开状态

模式说明
r读取文件,文件不存在则出现异常
r+读写文件,文件不存在则出现异常
rs在同步模式下打开文件用于读取
rs+在同步模式下打开文件用于读写
w打开文件用于写操作,如果不存在则创建,如果存在则截断
ws打开文件用于写操作,如果存在则打开失败
w+打开文件用于读写,如果不存在则创建,如果存在则截断
wx+打开文件用于读写,如果存在则打开失败
a打开文件用于追加,如果不存在则创建
ax打开文件用于追加,如果路径存在则失败
a+打开文件进行读取和追加,如果不存在则创建改文件
ax打开文件进行读取和追加,如果路径存在则失败

流式文件写入

同步、异步、简单文件的写入都不适合大文件的写入,性能较差,容易导致内存溢出
流式文件写入适用于一些比较大的文件,可以分多次写入到文件中

创建一个可写流

fs.createWriteStream(path[, options])
//path 文件路径
//options 配置的参数
eg:var ws = fs.createWriteStream("hello4.txt");

向文件中写入

ws.write("种自己的花");
ws.write("爱自己的宇宙");
//可无限添加

可以通过监听流的open和close事件来监听流的打开和关闭

//打开
ws.once("open",function (){
    console.log("已经打开流~");
}) //on绑定的是长期事件  once绑定的是一次性事件,该事件会在触发一次之后自动失效
//关闭
ws.once("close",function (){
    console.log("已经打开流~");
})

关闭流

ws.end();
//ws.close()可能因为版本问题,我可以通过这个代码实现内容全传入后再关闭

文件读取

同步文件读取

fs.readSync(fd, buffer, [options])

异步文件读取

fs.read(fd, [options,] callback)

简单文件读取

fs.readFile(path[, options], callback)
fs.readFileSync(path[, options])

举例:

fs.readFile("hello3.txt",function (err,data){
    if(!err)
    {
        //console.log(data.toString());
        console.log(data);  //得到的值是Buffer,适用于各种类型的文件
    }
});

读取文件后将文件内容写入到另一个文件中

var  fs = require("fs");
var path = "C:/Users/DELL/Desktop/111.jpg";
fs.readFile(path,function (err,data){
    if(!err)
    {
        //console.log(data.toString());
        //console.log(data);
        fs.writeFile("222.jpg",data,function (){
            if (!err){
                console.log("写入成功~");
            }
        })
    }
});

在这里插入图片描述

流式文件读取

如果要读取一个可读流中的数据,必须要为可读流绑定一个data事件,data事件绑定完毕,它会自动开始读取数据
逻辑写法:

var fs =require("fs");
var rs = fs.createReadStream("222.jpg");

var ws = fs.createWriteStream("333.jpg");

rs.once("open",function (){
    console.log("打开了可读流~");
})
rs.once("close",function (){
    console.log("关闭了可读流~");
    //读取数据结束,关闭可写流
    ws.end();
})

ws.once("open",function (){
    console.log("打开了可写流~");
})
ws.once("close",function (){
    console.log("关闭了可写流~");
})

rs.on("data",function (data){
    //console.log(data);
    ws.write(data);
});

pipe()可以将可读流中的内容,直接输出到可写流中
利用pipe()写

var fs =require("fs");
var rs = fs.createReadStream("222.jpg");
var ws = fs.createWriteStream("444.jpg");
rs.pipe(ws);

其他操作

  • 验证路径是否存在 fs.existsSync(path)
  • 获取文件信息 fs.stat(path[, options], callback)/fs.statSync(path[, options])
  • 删除文件 fs.unlink(path, callback)/fs.unlinkSync(path)

更多函数参考

注:学习参考来源b站【尚硅谷】最经典Node.js全套完整版教程(超哥yyds!!!!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值