NODE笔记 0

一些简单的node学习笔记记录,是Vue等前端框架的基础   入门学习备忘录            

文章目录

前言

一、node.js下载与调试

二、简单的使用

0.注意事项

1. Buffer的简单使用

2.node.js 中的文件系统 fs模块(API)

0.相关操作函数 :

1.文件写入

 2.文件读取

 3.补充

文件状态查看:

路径问题:

三 、简单应用与总结

批量重命名文件去除指定内容

小结:



前言

node.js 内置网络服务器,是前端框架学习的基础:

概念:node.js 是开源,跨平台的JavaScript运行环境,是一款可以运行JavaScript的软件。可以开发服务端,工具类应用(Webpack,Vite,Babel),桌面应用使用 electron框架开发(Vscode,postman)。node.js 中需要了解的进程与线程基础。


一、node.js下载与调试

 下载地址 打开官网如下,点击长期维护的版本,如若下载其他版本,可以点击download。

提供中文网址,国内用的是阿里的镜像,不是官方,但是下载速度比较快,历史版本需要找到下载后删除path后的URL,地址如下:CNPM Binaries Mirror (npmmirror.com) 。安装时直接点击msi文件安装即可,注意不必安装相关工具

安装完成后,打开cmd窗口,输入 node -v 回车后显示版本号,即为安装成功 。

在vscode中安装 CodeRunner,点击右上角三角形之后运行编写的js测试文件输出结果。

二、简单的使用

0.注意事项

node 不支持BOM DOM 操作,也不支持ajax,但是支持console和定时器API,node的顶级对象不是window,而是global,es2020支持 globalThis,

1. Buffer的简单使用

Buffer:大小固定(1字节),类似数组对象,处理二进制数据,性能较好,代码实例如下

console.log("ds:buffertest  ...") ;

let buf = Buffer.alloc(10);
console.log("buf: "+buf);

// 2.不安全,不会清空旧数据;但是速度快
let buf_2 = Buffer.allocUnsafe(10);
console.log("buf_2: "+buf_2); 

// 3.from 

let buf_3 = Buffer.from('Alice');

let buf_4 = Buffer.from([105,108,121]);
console.log("buf_3: "+buf_3); 
console.log("buf_4: "+buf_4); 
//转字符串
console.log(buf_4.toString());
//解析数组
let name = buf_3[2] ;
console.log("name:"+name) ;

//溢出,了解即可
let buf_5 = Buffer.from('ds');
console.log("buf_5: "+buf_5);
buf_5[0]= 361;
console.log("buf_5[0]--overflow:"+buf_5[0]);
console.log("buf_5[0]-- "+buf_5);
//

[Running] node "e:\nodePra\tempCodeRunnerFile.js"

ds:buffertest  ...

buf: ����������

buf_2: ����������

buf_3: Alice

buf_4: ily

ily

name:105

buf_5: ds

buf_5[0]--overflow:105

buf_5[0]-- is

2.node.js 中的文件系统 fs模块(API)

fs模块是一个重要功能,可以 对硬盘中的文件进行 读/写,移动,删除,重命名,也可以读取,删除,新建文件夹。

node中相对同步,提供了效率更高的异步操作。参考博客 

一般同步操作都有 Sync 标记,

0.相关操作函数 :
方法说明
writeFile异步写入
writeFileSync同步写入
appendFile / appendFileSync追加写入
createWriteStream流式写入
readFile异步读取
readFileSync同步读取
createReadStream流式读取

文件夹操作函数: 

项目Value
mkdir / mkdirSync创建文件夹
readdir / readdirSync读取文件夹
rmdir / rmdirSync删除文件夹
1.文件写入

代码如下(示例):

/***
 * 新建一个ds.txt,向其中写入 abcdefg
 *  再追加写入
 */

//0.导入fs模块
 var fs = require('fs');
 //1.写入文件
 fs.writeFile('\ds.txt','abcdefg',function (err){
    if(err){
        console.log("fail to write ! "+err);
        return;
    }else{
        console.log("  sucess ! ");
        return ;
    }
 });
 
 
 
 //2.写入追加文件
 fs.appendFile('\ds.txt','\r\nappdendContent',function (err){  //\r\n 换行
    if(err){
        console.log("fail to appdendwrite ! "+err);
        return;
    }else{
        console.log("  sucess appdend ! ");
        return ;
    }
 });



 node也支持流式写入以减少打开关闭文件的次数 节约资源。

let ws = fs.createWriteStream('./ds.txt');
  ws.write('\r\n 111111');
  ws.write('\r\n 222222');

  ws.write('\r\n 3333333');
  ws.write('\r\n 44444455');

 ws.end ;

 console.log(" end ! ");
 2.文件读取
let fs = require('fs');

fs.readFile('\ds.txt',(err, data)=>{
   if(err){
    console.log('err: '+err);
   }else{
    console.log("data: "+data);
   }
   
});

//同步读取
let dataSync = fs.readFileSync('\ds.txt');
console.log("dataSync: "+dataSync);

如果使用/ds.txt,node会直接读取E盘下的ds.txt,之后显示没有这个文件。

流式读取:

//流式读取 createReadStream
let rs = fs.createReadStream('\ds.txt') ;
rs.on('data',data=>{
    console.log(data);
    console.log(data.length)
});

rs.on('end',()=>{
    console.log("end read ! ") ;
}) ;

文件 移动与重命名:(如果移动到其他磁盘会显示报错因为跨区重命 名文件出现的权限)

fs.rename('./ds.txt','./temp/new.txt',(err)=>{
    if(err){ 
        console.log(err);
    }else{
        console.log(' 完成');
    }
});


//文件删除
fs.unlinkSync('./temp/new.txt');   console.log(' 完成');

 3.补充
文件状态查看:
let fs = require('fs');
fs.stat('./ds.txt',(err,data)=>{
    if(err){
        console.log('stat err: '+err);
       }else{
        console.log("stat data: "+data.size+'---'+data.mtime+'---'+data.isDirectory);
       }
});
console.log("stat Syncdata: "+fs.statSync('./ds.txt').isFile);
路径问题:

./ds.txt  :程序所在目录下的文件 ,也可以写  \ds.txt ,如果写 .\ds.txt,程序会寻找当前文件路径下的名称为 .ds.txt 的文件。也可以直接写绝对路径,但是文件移动要注意报错, 这是跨区重命名文件出现的权限问题。

对于绝对路径,也可以使用 __dirname ,将相对路径转换为绝对路径避免bug:

let fs = require('fs');
console.log('__dirname: '+fs.readFileSync(__dirname + '/ds.txt')); // __dirname
 

node中可以引入 path模块,实现格式化路径或拼接路径。

const path = require('path');

path模块有固定用法 ,可以查阅相关文档资料,这里做一些简单的使用介绍。

 

显然,按vscode的提示,输入路径后返回路径字符串中最后的一个“.”后的字符串,如果没有点,或者最后的结尾是个点,就会返回空字符串。 

还有join的拼接功能;返回文件夹名称的dirname;返回文件名的basename等功能。

let path = require('path') ;

var extname = path.extname('./ds.txt');
console.log("extname: "+extname);

var newdir = path.join('./02','./01');
console.log("newdir: "+newdir);

var fullpath = path.dirname('./ds.txt');
console.log("fullpath: "+fullpath);

var filename = path.basename('./ds.txt');

console.log("filename: "+filename);

返回结果如下

 

[Running] node "e:\nodePra\pathPra.js"

extname: .txt

newdir: 02\01

fullpath: .

filename: ds.txt

[Done] exited with code=0 in 0.256 seconds

三 、简单应用与总结

批量重命名文件去除指定内容

 功能需求:在我的电脑里存储了许多视频,但是视频文件的名字存在一些不必要的内容,现在需要使用node实现批量重命名功能。大概流程就是先读取文件夹下的所有文件名,循环这个读取到的文件名数组,再替换掉想要变更的特定文字。代码如下:

let fs = require('fs') ;
//F:\回形针视频\ 该文件夹下有多个文件,需要清除一些前后缀
var fileNames ; 
fileNames = fs.readdirSync('F:\回形针视频');
var newFileNames = new Array;
//   console.log("fileNames :"+fileNames+" length:"+fileNames.length);
    for(var num=0;num<fileNames.length;num++){
        // console.log("\r\n fileName :"+fileNames[num]);
          newFileNames[num]= fileNames[num].replace(" - 【回形针PaperClip】","");
          newFileNames[num]= newFileNames[num].replace("回形针PaperClip - ",""); 
          newFileNames[num]= newFileNames[num].replace("【回形针PaperClip】","");

          //fileNames[num],newFileNames[num]
// console.log("\r\n newFileName :"+newFileNames[num]);
fs.rename('F:\\回形针视频\\'+fileNames[num],'F:\\回形针视频\\'+newFileNames[num],err=>{
    if(err){
        console.log(err);
    }else{
        console.log(newFileNames[num]+" rename sucess ! ");
    }
});

    }
小结:

本文简单介绍了node与一些基础的使用方法,fs模块的应用。 http模块后面再介绍。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值