为了账号安全,请及时绑定邮箱和手机立即绑定

Nodejs入门(二)

标签:
Node.js

Nodejs基础api

1、path
path模块提供了很多实用的工具函数,用于处理文件与目录的路径,下面是它的api:

  • normalize 方法可以输出规范格式的path字符串

  • join 方法用于拼接path字符串

  • resolve 方法用于将相对路径解析为绝对路径

  • name 方法用于查看文件名

    • basename查看文件名

    • dirname查看所在路径

    • extname查看扩展名

  • parse与format,parse用于将一个路径字符串返回成一个对象,而format则正好相反,如果有时候你需要修改一个路径的话,就可以先parse修改之后再format回去

  • delimiter 提供不同系统下的分隔符,windows系统(;)和posix(:)系统分隔符不同。sep 返回各平台的分隔符(Windows,POSIX/)

    //delimiter
    console.log(process.env.PATH)
    'C:\Windows\system32;C:\Windows;C:\Program Files\node'

    process.env.PATH.split(path.delimiter)
    ['C:\Windows\system32', 'C:\Windows', 'C:\Program Files\node\']

    //sep
    'foo\bar\baz'.split(path.sep)
    返回:['foo','bar','baz']

path路径需要注意的一些地方

  • _dirname、_filename总是返回文件的绝对路径

  • process.cwd( )总是返回执行node命令所在文件夹

2、Buffer(缓冲)
Buffer是global对象的属性,用于处理二进制数据流。它的实例类似整数数组,但是它里面是一些0-255的数字(默认用十六进制表示)大小固定。且用C++代码在V8堆外分配物理内存

如何实例化Buffer:

  • Buffer.alloc( length ) or Buffer.alloc( length,1 )

  • Buffer.allocUnsafe( length ) // 它较于alloc的区别是没做初始化,这样速度快,但内存块原来有的东西没清空,所以要用fill( )于write( )把里面的内容重写一下

  • Buffer.from( [1,2,3] ) or Buffer.form( 字符串 , 编码格式)

以下是它的类的一些常用方法:

  • Buffer.byteLength 返回一个字符串的实际字节长度

  • Buffer.isBuffer( ) 判断是否时buffer对象

  • Buffer.concat( ) 拼接buffer,传入的参数是一个数组

再看下实例的属性

  • buf.length 返回 buf 在字节数上分配的内存量

  • buf.toString( ) 根据指定的字符编码解码 buf 成一个字符串

  • buf.fill( ) 用于填充buf

  • buf.equals( ) 比较两个buf的内容是否一样

  • buf.indexOf( ) 用于查找匹配

  • buf.copy( )

3、event
Nodejs所有能触发事件的对象都是EventEmitter类的实例,这些对象开放了一个 eventEmitter.on() 函数,允许将一个或多个函数绑定到会被对象触发的命名事件上。
eventEmitter.on() 方法用于注册监听器,eventEmitter.emit() 方法用于触发事件。

const EventEmiter = require('events');class triggerEvent extends EventEmiter {}

const ex = new triggerEvent();//实例化ex.on("error",(err,time) => {
  console.log(err);
  console.log(time)
});//事件绑定ex.emit("err",new Error("opps!"),Date.now());//手动触发事件,并传两个参数

Nodejs事件的绑定还可以用once进行绑定,让事件只触发一次。
而事件可以通过removeListener(event name,function name)进行移除,或者使用removeAllListeners(event name)移除所有

4、fs(文件系统)
fs 模块提供了一些 API,用于以一种类似标准 POSIX 函数的方式与文件系统进行交互。
所有的文件系统操作都有异步和同步两种形式。
异步形式的最后一个参数都是完成时回调函数。 传给回调函数的参数取决于具体方法,但回调函数的第一个参数都会保留给异常

  • fs.readFile( ) 读取文件

 const fs = require("fs");

    fs.readFile("./event.js",'utf8',(err,data) => {      if(err) {        throw err;
      } else {        console.log(data);
      }
    })//异步读取文件

    const data = fs.readFileSync("./event.js",'utf-8');//同步读取文件
    console.log(data);
  • fs.writeFile( ) 写入文件

const fs = require("fs");const content = Buffer.from("balabalabala");

fs.writeFile("./text",content,err => {  if(err){
    throw err;
  } else {
    console.log("done !");
  }
})
  • fs.stat( ) 输出文件的stats属性

const fs = require("fs");
 
fs.stat("stat.js", (err,stats) => {    if(err) {      console.log("文件不存在!");      return;
    } else {      console.log(stats.isFile());//是否为文件
      console.log(stats.isDirectory());//是否为文件夹
    }
 })
  • fs.watch( ) 监视文件或者文件夹

const fs = require("fs");

fs.watch('./',{
  recursive: true //指明是否全部子目录应该被监视,或只是当前目录。
},(eventType,filename) => {  console.log("变化类型",eventType);  console.log("变化的文件名",filename);
})
  • fs.createReadStream( ) 创建数据流,读取数据
    数据是一点点流动的,不是全部接受,相较于fs.readFile( )会显得更加优雅

const fs = require("fs");const rs = fs.createReadStream('./readstream.js');

rs.pipe(process.stdout);//数据导向哪里,stdout就是控制台
  • fs.createWriteStream( ) 创建数据流,写入数据
    fs.createReadStream( ),它是一种优雅的写入数据的方式

const fs = require("fs");const ws = fs.createWriteStream('./test.txt');const timer = setInterval(() => {  const num = parseInt(Math.random() * 10);//取19以内的随机数
  if(num < 8){
    ws.write(num + '');//转换为字符串,因为只能写入buffer或者字符串
  } else {
    clearInterval(timer);//清楚定时器
    ws.end();//结束写入数据流
  }
},1000);//每个一秒写入一段数据ws.on("finish",() => {  console.log("done!");
});//监听事件结束

下面还有一些常用的api:

  • fs.rename( ) 修改文件名

  • fs.unlink( ) 删除文件

  • fs.readdir( ) 读取文件夹下的所有文件名

  • fs.mkdir( ) 创建文件夹

  • fs.rmdir( ) 删除文件夹

原文出处:https://www.cnblogs.com/firefish1/p/9569662.html

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消