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( ) 删除文件夹

Nodejs入门(二)的更多相关文章

  1. 二、NodeJS入门——准备工作(2)——MongoDB安装以及客户端Robomongo安装和使用

    目录     1.介绍     2.下载地址     3.MongoDB安装过程     4.MongoDB的使用     5.MongoDB添加管理员账户     6.RoboMongo安装过程   ...

  2. NodeJS入门简介

    NodeJS入门简介 二.模块 在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分. const http = require ...

  3. nodeJs 5.0.0 安装配置与nodeJs入门例子学习

    新手学习笔记,高手请自动略过 安装可以先看这篇:http://blog.csdn.net/bushizhuanjia/article/details/7915017 1.首先到官网去下载exe,或者m ...

  4. NodeJS入门(四)—— path对象

    很快Node就会迎来4.0的时代,届时将并入现有的iojs,所以先前写过的iojs入门系列直接更名为NodeJS入门. 本篇开始将逐个介绍Node的各主要模块,依循API文档走一遍,但会给出比API文 ...

  5. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

  6. Swift语法基础入门二(数组, 字典, 字符串)

    Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...

  7. Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)

    原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...

  8. DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表

    原文:DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的, ...

  9. 01.Nodejs入门之Helloworld

    说明:本文章可供有一定js基础的朋友参考nodejs入门,本文未讲解nodejs的安装,如有需要的同学可以加QQ3382260752找我,进行交流学习. 1.新建文件夹helloworld demo, ...

  10. css入门二-常用样式

    css入门二-常用样式总结 基本标签样式 背景色background-color 高度height; 宽度width; 边框对齐以及详细设定举例 width/*宽度*/: 80%; height/*高 ...

随机推荐

  1. Flutter: redux简单使用

    Pub redux flutter_redux import 'package:flutter/material.dart'; import 'package:redux/redux.dart'; i ...

  2. NGK公链脱颖而出,成为值得期待的项目!

    当下2020年是动荡的一年,全世界经济危机汲汲可危,在这个特殊的时刻,有人抱怨说这是最坏的年代,也有人庆幸说这是最好的年代,历史不会重演,但总是惊人的相似,首先带你回顾一下上一次金融危机出现的2008 ...

  3. Mysql的join算法

    本文转载自Mysql的join算法 导语 在Mysql中,使用Nested-Loop Join的算法思想去优化join,Nested-Loop Join翻译成中文则是"嵌套循环连接" ...

  4. JavaScriptBOM操作

    BOM(浏览器对象模型)主要用于管理浏览器窗口,它提供了大量独立的.可以与浏览器窗口进行互动的功能,这些功能与任何网页内容无关.浏览器窗口的window对象是BOM的顶层对象,其他对象都是该对象的子对 ...

  5. Python3.x 基础练习题100例(41-50)

    练习41: 题目: 模仿静态变量的用法. 程序: def varfunc(): var = 0 print('var = %d' % var) var += 1 if __name__ == '__m ...

  6. Python3+pygame实现Windows经典扫雷

    今天给大家分享一个由Python3(当然python3.5 3.6 3.7 3.8 ...都行)与pygame模块结合制作的一个经典小游戏"扫雷" 代码是完全可运行的,请大家放心运 ...

  7. c# float类型和double类型相乘出现精度丢失

    c# float类型和double类型相乘出现精度丢失 double db = 4.0; double db2 = 1.3; float f = 1.3F; float f2 = 4.0F; Deci ...

  8. JAVA_标识符、数据类型、变量

    标识符和关键字 ​ 所有的标识符否应该以字母a ~ z和 A ~Z ,美元符($).下划线(_)开始. ​ 首字符之后可以是字母a ~ z和 A ~Z ,美元符($).下划线(_)的任意字符组合. 注 ...

  9. 几大BSD 区别

    OpenBSD 侧重于安全,软件包较少,较陈旧,比如 KDE 才 3.5,为了安全舍弃了 sudo 和 linux 兼容层: FreeBSD 是开发者最多用户最多软件包最多的,有 ZFS 和 Linu ...

  10. 再探循环依赖 → Spring 是如何判定原型循环依赖和构造方法循环依赖的?

    开心一刻 一天,侄子和我哥聊天,我坐在旁边听着 侄子:爸爸,你爱我妈妈吗? 哥:这话说的,不爱能有你吗? 侄子:确定有我不是因为荷尔蒙吗? 哥:因为什么荷尔蒙,因为爱情! 侄子:那我妈花点钱,你咋老说 ...