Node.js 基础学习

154 阅读2分钟

常用模块

path 模块

 // 引入path模块
 const path = require('path')
 // path.resolve 和 path.join 路径拼接
 
 const basePath = '../User/node'
 const fileName = 'abc.txt'
 
 // resolve会查找拼接路径前面是不是有/ 如果没有/ 则会
 在前面加上当前路径的根路径
 path.resolve(basePath, fileName)
 
 // join只会按步就班的拼接
 path.join(basePath, fileName)
 
 // 获取路径的信息
 const filePath = '/User/node/abc.txt'
 // 获取路径
 path.dirname(filePath)
 // 获取文件名
 path.basename(filepath)
 // 获取文件后缀 txt
 path.extname(filepath)

fs 模块

读取文件信息

// 引入fs模块
const fs = require('fs')

// 读取文件信息,利用 stat, 有三种方式
const filepath = './abc.txt'
// 方式一 同步操作 阻塞
const stat = fs.statSync(filepath)
// 方式二 异步操作  非阻塞
fs.stat(filepath, (err, info) => {
   if (err) {
   	console.log(err)
        return
    }
    console.log(info)
})
// 方式三: promise  非阻塞
fs.promises.stat(filepath).then(info => {
	console.log(info)
}).catch(err => {
	console.log(err)
})

文件读写

const content = 'hello node'
 
// 直接写会直接把内容覆盖掉, 如果文件不存在,会进行创建
fs.writeFile('./abc.txt', content, err => {
  if (err) {
    console.log(err)
    return;
  }
  console.log('创建写入成功')
} )

// 文件追加 添加 { flag: 'a' }
fs.writeFile('./abc.txt', content, {flag: 'a' }, err => {
  console.log(err)
} )

// 文件追加也可以利用appendFile
fs.appendFile('./css/index.less', '\nbody{color: red}', err => {
    if (err) {
        console.log(err)
        return;
    }
    console.log('追加成功')
})

// 文件读取,不指定编码 data则是buffer数据
fs.readFile('./css/index.less', (err,data) => {
    if (err) {
        console.log(err)
        return;
    }
    console.log(data)  // data 是buffer
    data.toString()  // 将buffer 转为toString
    console.log(data.toString())
})

// 文件读取,指定utf-8编码
fs.readFile('./abc.txt', { encoding: 'utf-8' }, (err, info) => {
  console.log(info)
})
 
 
//fs.unlink  删除文件
fs.unlink('./css/aaa.less', err => {
    if (err) {
        console.log(err)
        return;
    }
    console.log('删除文件成功')
})

文件夹操作

// fs.stat 检测文件是文件还是目录
fs.stat('./module', (err, data) => {
    if (err) {
        console.log(err);
        return;
    }

    console.log(`是文件: ${data.isFile()}`)
    console.log(`是目录: ${data.isDirectory()}`)

})

// fs.mkdir 创建目录 目录  权限(777) 回调
fs.mkdir('./css', err => {
    if (err){
        console.log(err);
        return;
    }
    console.log('创建成功')
})

// fs.rmdir  删除目录
fs.rmdir('./css/aaa.less', err => {
    if (err) {
        console.log(err)
        return;
    }
    console.log('删除目录成功')
})


// 读取文件夹中的所有文件, 返回数组,如果文件夹里面有文件夹,
// 只会显示文件夹名称,深层次的文件不会显示
fs.readdir(dirname, (err, files) => {
  console.log(files)
})

// fs.rename  重命名 和  移动文件
fs.rename('./css/aaa.css','./css/index.css', err => {
    if (err) {
        console.log(err)
        return;
    }
    console.log('重命名成功')
})

读取文件夹里面的所有文件(查询深层次)-- 利用递归

const getFiles = (dirname) => {
  fs.readdir(dirname, { withFileTypes: true}, (err, files) => {
    files.forEach(item => {
      if (item.isDirectory()) {
         // 需要路径,拼接起来
         const itemPath = path.resolve(dirname, item.name)
         getFiles(itemPath)
      } else {
        console.log(item.name)
      }
    })
  })
}
getFiles(文件夹路径)

event

基础使用

const EventEmitter = require('events')

// 创建发射器
const emitter = new EventEmitter()

// 监听一个事件
emitter.on('click', (args) => {
  console.log('监听到了click事件', args)
})

// 发射一个事件
emitter.emit("click", 'node参数')


// 移除所有的监听
emitter.removeAllListeners(); 
// 移除click事件监听
emitter.removeAllListeners('click'); 

// 将此次监听放到最前面
emitter.prependListener('click', (args) => {
  console.log("将此次监听放到最前面", args)
})

// 只监听一次事件 once
emitter.once('clicks', (args) => {
  console.log("只监听一次", args)
  // 所以发射了两次clicks事件,这里只打印了一次
})
emitter.emit("clicks", 'danilelee')
emitter.emit("clicks", 'danilelee')


// 获取监听的所有事件
emitter.eventNames()
// 获取监听事件的个数
emitter.listenerCount("clicks") // 1