基础API

常用API

  • path
  • Buffer
  • event
  • fs

path

// 规范化路径
path.normalize(path)  

// 拼接路径
path.join([...paths])
path.join('/foo','bar','baz/asdf','qunx','../.')

//绝对路径
path.resolve([...paths]);
path.resolve('foo','/bar','baz')
/*
返回 :/bar/baz  从右到左第一个绝对路径 文档上的几个例子
常用  path.resolve('./') 获取当前路径的绝对路径
*/ 

//basename ,extname, dirname
path.basename('bby/365.js')
path.extname('.index') // 返回:''
path.dirname(bby/365/index.html)

//parse, format
path.parse('/home/user/dir/file.txt') 
path.format({...})   // 对象 -->路径字符串 ,与path.parse()相反

// sep, delimiter, win32, posix 这些都是属性,不是方法
path.sep   --> 片段分隔符
path.delimiter  --> 路径分隔符
path.win32
path.posix

_dirname, _filename 总是返回的文件的绝对路径;
process.cwd() 返回执行node命令所在的文件夹;
./ 在 require() 中 相对当前文件所在的文件夹;在其他地方,比如:path.resolve('./') 就和 process.cwd() 一样 是相对node命令所在的文件夹;


Buffer

全局变量,不需要require();

  • Buffer 用于处理二进制数据流
  • 实例类似整数数组,大小固定
  • C++ 代码在 V8 堆外分配物理内存
//实例化 Buffer
Buffer.alloc(5, 'a','base64') //默认字符编码 'utf8'不需要写
Buffer.allocUnsafe()
Buffer.form([1,2,3])
// Buffer 类 静态方法
/*
Buffer.bytelength()
Buffer.isBuffer()
Buffer.concat()
*/
// 实例 的方法
/*
buf.length()
buf.toString()
buf.fill()
buf.equals()
buf.indexOf()
buf.copy()
*/

event

  • eventEmitter.on()
  • eventEmitter.once()
  • eventEmitter.emit()
  • eventEmitter.removeListener()
  • eventEmitter.removeAllListeners()
const EventEmitter = require('events');
class myEvnet extends EventEmitter{};
const event1 = new myEvent();
// 绑定事件
event1.on('test', () =>{
   console.log('testtest')
})
// 触发事件
event1.emit('test')

eventEmitter.emit() 传入多个参数情况
eventEmitter.on()绑定事件,可以多次调用;eventEmitter.once()绑定事件,只能调用一次,监听器会被注销


fs 文件系统

  • fs.readFile()
    对应同步方法:fs.readFileSync()
    4-8 解释了为什么要用异步方法
// 读取文件
const fs = require('fs');
fs.readFile('./index.html', (err, data) =>{
    if(err) throw err;
    console.log(data.toString())
})

  • fs.writeFile()
const fs = require('fs');
fs.writeFile('message.txt','hello nodejs adfa','utf8', (err, data) =>{
    if(err) throw err;
    console.log(data)  // undefined 回调函数只有一个err参数
})

  • fs.stat()
// 获取文件信息
const fs = require('fs');
fs.stat('index.html',(err,stats) =>{
    if(err){
        console.log('文件不存在!')
    };
    console.log(stats);
    console.log(stats.isDirectory())
    console.log(stats.isFile())
})

  • fs.rename()
const fs = require('fs');
fs.rename('./message.txt','./bby.txt', (err) =>{
    if(err) throw err;
    console.log('done')
})

  • fs.unlink()
// 删除文件
const fs = require('fs');
fs.unlink('bby.txt',(err) =>{
    if(err) throw err;
    console.log('remove')
})

  • fs.readdir()
// 'path' 以当前文件为基准,不是运行时的相对路径
const fs = require('fs');
fs.readdir('../node-test',(err,files) =>{
    if(err) throw err;
    files.map((file) =>{
        console.log(file);
    })
})

  • fs.mkdir()
// 创建文件夹
const fs = require('fs');
fs.mkdir('./bby',(err)=>{
    if(err) throw err;
})

  • fs.rmdir()
// 删除文件夹
const fs = require('fs');
fs.rmdir('./bby',(err)=>{
    if(err) throw err;
})

  • fs.watch()
    监视文件变化,用于本地构建
// 监视filename 的变化
const fs = require('fs');
fs.watch('../node-test',(evnetType,filename) =>{
  console.log(`事件变化类型:${evnetType}`);
  if(filename){
    console.log(`变化的文件是:${filename}`)
  }else{
    console.log('没有提供文件名!');
  }
})

  • fs.createReadStream()
const fs = require('fs');
const st = fs.createReadStream('message.txt',{start:3});
st.pipe(process.stdout)

  • fs.createWriteStream()
const fs = require('fs');

const ws = fs.createWriteStream('bby.txt');
//每 200 ms 写入一个数字
const tid = setInterval(function(){
    const num = parseInt(Math.random() * 20);
    if(num < 15){
        ws.write(num + ' ')  // num 要转成 字符串 否则报错
    }else{
        clearInterval(tid);
        ws.end()
    }
},200)
// 完成后 ,触发事件
ws.on('finish',()=>{
    console.log('done!')
})

你可能感兴趣的:(基础API)