nodejs 笔记
module.js(要暴露的数据)
1、
var a='dwadasd' exports.a=a exports.add=function(a ,b){ return a+b } 2、 module.exports={ //效果一样,不能同时使用,如果同时使用module.exports会覆盖exports的数据 a:"dwada", add:function(a ,b){ return a+b } }
index.js
var module=require('./module.js') //引入使用方法 console.log(module.add(5,4))
require('./module.js') //加载module.js所有内容
var fs=require('fs') //nodejs的核心模块,文件系统
全局变量都保存在global中,类似window
a=10 console.log(global.a) //输出10
console.log(arguments) //查看传递的参数与返回值
function (exports,require,module,_filename,_dirname){ //node执行时会把模块中的代码添加到此函数内 }
buffer(缓冲器)
- 与数组结构类似,操作的方法也和数组类似
- 数组中不能存储二进制文件,而buffer可以
- buffer中存储的是二进制数据,但在显示时是以十六进制形式展示
var str="abcd" var buf=Buffer.from(str) //将字符串转换为buffer console.log(buf.length) //4,占用内存的大小(单位:字节)
console.log(buf.toString()) //将buffer转换为字符串
var buf=Buffer.alloc(4) //创建一个4个字节的buffer 00 00 00 00 var buf=Buffer.allocUnsafe(4) //创建一个4个字节的buffer,但其中可能包含敏感数据(可能会有上次使用该内存时保存的数据,未清空) buf[0]=45 //通过索引操作元素 buf[10]=10 //不行,buffer一旦创建,大小不能改变 buf[1]=256 //不行,范围为0-255 //在控制台或页面输出时会转换为十进制数显示
自定义事件
const EventEmitter = require('events') //引入events模块
class MyEventEmitter extends EventEmitter{} //继承一个子类
const event = new MyEventEmitter() //定义一个实例
//为该实例添加自定义事件
//.on可重复触发,可定义多个相同事件名的事件,调用时会重复触发
event.on('eventsName',(value)=>{
console.log(value) //自定义事件
})
//.once只能触发一次
event.once('eventsName',(value)=>{
console.log(value) //自定义事件
})
event.emit('eventsName','move') //调用事件,打印出:move
fs(文件操作模块)
var fs=require('fs') //引入fs模块
flag
-
'a': 打开文件用于追加。 如果文件不存在,则创建该文件。 -
'ax': 类似于'a',但如果路径存在,则失败。 -
'a+': 打开文件用于读取和追加。 如果文件不存在,则创建该文件。 -
'ax+': 类似于'a+',但如果路径存在,则失败。 -
'as': 打开文件用于追加(在同步模式中)。 如果文件不存在,则创建该文件。 -
'as+': 打开文件用于读取和追加(在同步模式中)。 如果文件不存在,则创建该文件。 -
'r': 打开文件用于读取。 如果文件不存在,则会发生异常。 -
'r+': 打开文件用于读取和写入。 如果文件不存在,则会发生异常。 -
'rs+': 打开文件用于读取和写入(在同步模式中)。 指示操作系统绕过本地的文件系统缓存。这对于在 NFS 挂载上打开文件时非常有用,因为它可以跳过可能过时的本地缓存。 它对 I/O 性能有非常实际的影响,因此不建议使用此标志(除非真的需要)。
这不会把
fs.open()或fsPromises.open()变成同步的阻塞调用。 如果需要同步的操作,则应使用fs.openSync()之类的。 -
'w': 打开文件用于写入。 如果文件不存在则创建文件,如果文件存在则截断文件。 -
'wx': 类似于'w',但如果路径存在,则失败。 -
'w+': 打开文件用于读取和写入。 如果文件不存在则创建文件,如果文件存在则截断文件。 -
'wx+': 类似于'w+',但如果路径存在,则失败。
文件夹操作
//创建文件夹 fs.mkdir('logs',(err)=>{ if(err) throw err console.log('文件夹创建成功') }) //修改文件名(文件夹或文件都可以) fs.rename('./logs','./log',()=>{ console.log('修改成功') }) //删除文件夹 fs.rmdir('./log',()=>{ console.log('删除成功') })
fs.readdir('./logs',(err,result)=>{ //获取文件夹下有那些文件(包括文件夹)
console.log(result)
})
文件写入
fs.openSync(path(文件路径,如直接写文件名这是在当前目录下查找)[, flags, mode(权限)]) //同步方法 fs.open(path[, flags[, mode]], callback) //异步,fs的方法都有一个同步和一个异步,异步方法的回调传的第一个参数为err
var fn=fs.openSync("hello.txt",'w') //打开文件用于写入,如果没有就创建一个文件,会返回一个文件描述符,通过文件描述符对文件进行操作 console.log(fn) fs.writeSync(fd(文件描述符), string(要写入的内容)[, position(写入的起始位置)[, encoding(编码格式)]]) //向文件写入内容 fs.writeSync(fn,"abcdefg") fs.closeSync(fn) //关闭文件
fs.writeFileSync(file(文件路径,如直接写文件名则是在当前目录下查找), data[, options]) //文件写入 fs.writeFileSync('hello.txt',"hello") //此方法为上面三步的封装方法,一步即可完成上面的三步 fs.writeFileSync('hello.txt',"hello124",{flag:'a'}) //a:在原数据后面追加数据;w:覆盖原数据。不写默认为w fs.writeFileSync("C:/Users/Public/Documents/hello.txt","hello124")
流操作
fs.createWriteStream(path[, options]) //可写流,适合写入大文件,会返回一个文件描述符 var ws=fs.createWriteStream('hello2.txt') ws.once("open",function(){ //类似jquery中的one方法,为ws绑定一个打开和关闭事件 console.log("流打开了") }) ws.once("close",function(){ console.log("流关闭了") }) ws.write("hello") //内容写入 ws.write("hello1") ws.write("hello2") ws.write("hello3") ws.end() //关闭流
文件读取
var data=fs.readFileSync("hello.txt") //返回buffer数据 console.log(data.toString())
可读流
var crs=fs.createReadStream('hello.txt') //创建一个可读流,返回一个文件描述符 crs.once('open',function(){ console.log("可读流打开了") }) crs.once('close',function(){ console.log("可读流关闭了") }) crs.on('data',function(data){ console.log(data) //读取数据 })
将可读流数据传给可写流
var crs=fs.createReadStream('hello.txt') var cws=fs.createWriteStream('hello1.txt') crs.pipe(cws) //将可读流数据传给可写流
var isExists=fs.existsSync(hello.txt) //检查是否存在此文件,返回一个布尔值
var data=fs.statSync('hello.txt') //返回此文件信息 console.log(data)
fs.unlinkSync("hello.txt") //删除此文件

浙公网安备 33010602011771号