当前位置: 首页 > 后端技术 > Node.js

学习笔记:node.js(一)

时间:2023-04-03 11:25:33 Node.js

模块——require/exports/modulevarfs=require('fs');varhttp=require('http');//引用模块module.exports=function(){}//输出模块文件复制小文件复制varfs=require('fs');functioncopy(src,dst){fs.writeFileSync(dst,fs.readFileSync(src));}functionmain(argv){copy(argv[0],argv[1]);}main(process.argv.slice(2));process是一个全局变量,命令行参数可以通过process.argv获得。由于argv[0]固定等于nodejs执行程序的绝对路径,argv[1]固定等于主模块的绝对路径,所以第一个命令行参数从argv的位置开始[2].大文件复制varfs=require('fs');functioncopy(src,dst){fs.createReadStream(src).pipe(fs.createWriteStream(dst));}functionmain(argv){copy(argv[0],argv[1]);}main(process.argv.slice[2]);Buffer(datablock)Buffer提供对二进制数据的操作。构造Buffer实例:varbin=newBuffer([0x68,0x6c,0x6c,0x6f]);缓冲区和字符串转换:varstr=bin.toString('utf-8');//=>"hello"会将字符串转换为指定编码下的二进制数据:varbin=newBuffer('hello','utf-8');//=>Buffer和string的区别:string是只读的,对string的任何修改都会产生一个新的string,而原来的string保持不变。至于Buffer,它更像是一个C语言的数组,可以用来进行指针操作。变化的是指针的指向。如果修改了,原来的Buffer也会被修改。varbin=newBuffer([0x68,0x65,0x6c,0x6c,0x6f]);varsub=垃圾箱。切片(2);子[0]=0x65;安慰。日志(bin);//=>如果要复制一个Buffer,首先要新建一个Buffer,通过.copy方法复制原Buffer中的数据。varbin=newBuffer([0x68,0x65,0x6c,0x6c,0x6f]);vardup=newBuffer(bin.length);bin.copy(dup);dup[0]=0x48;console.log(bin);//=><缓冲区68656c6c6f>console.log(dup);//=>Stream(数据流)如果内存不能一次容纳要处理的数据,就需要使用数据流,边读边处理。varrs=fs.createReadStream(路径名);rs.on('data',function(chunk){rs.pause();//处理数据前暂停数据读取,处理数据后继续读取数据dosomething(chunk);});rs.on('end',函数(){cleanUp();});为数据目标创建只写数据流,示例如下:varrs=fs.createReadStream(pathname);varws=fs.createWriteStream(dst);rs.on('data',function(chunk){if(ws.write(chunk)===false){//当写入速度跟不上读取速度时,只有写入数据流的内部缓存会爆炸根据返回值判断传入的数据是写入目标还是暂时放入缓存rs.pause();//如果放入缓存则暂停数据读取}});rs.on('end',function(){ws.end();});ws.on('drain',function(){rs.resume();});FileSystem(文件系统fs模块提供的API基本上可以分为三类:文件属性读写fs.stat、fs.chmod、fs.chown和其他文件内容读写fs.readFile、fs.readdir、fs.writeFile、fs.mkdir等底层文件操作fs.open,fs.read,fs.write,fs.close等fs模块api的回调参数基本上都是两个fs.readFile(pathname,function(err,data){if(err){//处理错误。}else{//处理数据。}});//异步IO模型try{vardata=fs.readFileSync(pathname);//处理数据。}catch(err){//处理错误。};//同步模型Path(path)path.normalize(key)//将传入路径转换为标准路径path.join()//将多个传入路径转换为标准路径path.extname//获取文件的扩展名path.extname('foo/bar.js');//=>".js"