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(缓冲器)

  1. 与数组结构类似,操作的方法也和数组类似
  2. 数组中不能存储二进制文件,而buffer可以
  3. 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")        //删除此文件

 

 

 

 
 
 
 
posted @ 2021-05-25 09:27  终末s  阅读(73)  评论(0)    收藏  举报