node--模块化简介,fs模块,Buffer对象

常规解析JavaScript:JavaScript文件引入html文件中,浏览器解析,可在控制台打印查看

因为node是直接将V8引擎拿出来解析JavaScript,所以不需要浏览器

在repl中解析JavaScript:

例子1:

 

1.找到当前文件所在目录

 

2.输入 node  文件名全称

就可以解析JavaScript文件了:

 

例子2:

直接输入node  文件路径\文件名

例子3:

在文件所在目录按下shift+鼠标右键

进入命令窗口

 

 输入 node  文件名

 

 

 注意:window作为浏览器的最大宿主对象,而node 是直接用V8引擎直接解析的,所以没有window对象。

可以用global对象来代替window对象

global.a  = 10  相当于 var a = 10

 

node文档

断言

console.assert(判断,“提示文字”)

判断a的值是否还为0,

值未改变时

a的值改变了

 

计算代码运行时间:

 路径:

 模块化

什么是模块化

在Node中,每个js文件都独立运行在一个闭包中,不是全局的作用域,模块与模块无法互相访问。
目的是:全局变量私有化,避免全局污染,方便管理和维护

 暴露模块exports

可以将一个js文件作为一个模块,然后用exports对象进行导出

因为exports是个对象,所以可以通过打点添加属性或方法,然后赋值导出

1.exports全局的对象

exports使用.语法来向外暴露内部变量 exports.xxx = xxx;

2. module.exports

module.exports既可以通过.语法,也可以直接赋值一个对象

  • module.exports 初始值为一个空对象 {}
  • exports 是指向的 module.exports 的引用
  • require() 返回的是 module.exports 而不是 exports
exports与module.exports的注意
  1. module.exportsexports所指向的内存地址相同
  2. module.exports{}整体导出时会覆盖exports的属性和方法
  3. module.exportsexports通过打点的方式进行添加属性或方法相同时,后面赋值会覆盖前面
  4. exportsmodule.exports同时赋值时,exports所使用的属性和方法必须出现在module.exports,若属性没有在module.exports中定义的话,出现undefined
接收模块require

require:全局函数,用来导入模块的

写法:

var abc = require('文件路径/文件名')    //全局方法,主要用来导入模块

此时的 abc 为导入的对象。可以通过打点的方式进行

 

注意路径写法:

 “./” 代表当前路径 ,同一文件夹下引入,必须加

“/”  盘符根路径

例子:

 

 

 

 

fs文件系统模块

在node中,有许多内置模块,需要通过require()引入

使用文件系统,先引入文件系统的模块

 fs模块可以对文件读写

例子

const fs = require("fs");   //fs是内置模块
fs将调用方法读文件

fs.readFile(path[, options], callback) //异步读文件

path:文件路径(必需)

option:编码符(可选),当不选时,将以Buffer对象输出

可以用data.toString()方法转为文件内容的原始值

 

callback:回调函数

err:错误

data:文件的内容

throw:抛出错误,代码不会向下执行

const fs = require('fs');
fs.readFile('./01.html','utf8',(err,data) =>{
    console.log(data)  //当发生错误时,还是会执行到这一行, 输出undefined
//没有错误时,输出文件内容
})

 当发生错误时,用throw 抛出错误,阻止代码继续向下执行

 

fs.readFileSync(path[, options])  //同步读文件

 如何判断读取文件是同步还是异步

const fs = require('fs');
fs.readFile('./01.html','utf8',(err,data) =>{
    if (err) {
        throw err
    }
    console.log(data)    
})
console.log(123)  //用于判断同步异步

当123在文件内容之前输出,则是异步,反之为同步

fs.access('path',callback)  :判断文件或文件夹是否存在

const fs = require('fs');  //导入fs模块
fs.access("./01.js",(err) =>{
    if(err) throw err    //如果有错误,抛出错误,停止执行下面代码
    console.log("holly ")  //没有错误,则输出
})
fs将调用方法写文件
fs.writeFile(path,content,'utf8',(err)=>{
 })

path:文件路径/文件名

content:文件内容(string,buffer)

注意:

文件内容写入会覆盖,之前的文件内容,

如果没有文件则会创建一个文件,并写入内容

如果文件路径不对或文件夹不存在,则会报错

fs将调用方法追加文件
fs.appendFile('./05.json',"这个是追加的内容",'utf8',(err) => {
     console.log(err)
})

注意:

文件内容不会覆盖之前的文件内容

如果没有文件则会创建一个文件,并写入内容

如果文件路径不对或文件夹不存在,则会报错

fs将调用方法创建文件夹
fs.mkdir(path,(err) => {

 })

注意:同一路径下文件已存在,再次创建文件夹则会报错;

fs将调用方法读取文件夹及文件
s.readdir('./',(err,files) => {
    console.log(files)
 })

files:文件及文件夹数组

注意:所有的文件夹及文件将以数组的形式展示

fs将调用方法判断是否为文件夹及文件

方法一

fs.access(path,(err) => {
 })

如果不是或不存在,则会报错

 方法二

fs.stat('./04.json',(err,stats) => {  //
if(stats.isDirectory()){
console.log('是文件夹')
}else{
console.log('不是文件夹')
}
})
stats为文件及文件夹的方法的对象
stats.isDirectory():判断是否为文件夹,是则返回true

 文件流

fs.createReadStream(path)  :该函数的作用是用来打开一个可读的文件流

fs.createWriteStream(path)  :该函数的作用是用来写入一个可读的文件流

var fs = require("fs");

// 读文件的流
var rs = fs.createReadStream("./../ES6-5箭头函数.mp4");
// 写文件的流
var ws = fs.createWriteStream("./abc.mp4");  //这里仅仅只是将文件写入,文件还没有内容

rs.on('data',function(chunk) {
console.log(chunk.length); // chunk就是一个Buffer(存放16进制数据的"数组",长度以8字节计算(两个16进制为一个元素))

data = data + chunk.length;
ws.write(chunk); // Node中的Buffer不占用垃圾回收机制中的内存。 Buffer是由C/C++模块维护。 'data'+chunk会在内部自动调用toString()函数。 建议直接返回buffer节省处理字符串的性能开销。
});

rs.on('end',function() {
console.log('结束啦!');
ws.end();
});

chunk:就是一个Buffer对象,数组中的元素为两个16进制组成,

Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。

 Buffer对象

Buffer代表一个缓冲区,主要用于操作二进制数据流,其用法与数组非常相似。

创建一个Buffer实例

创建

var buf = new Buffer(5);
console.log(buf) // <Buffer 00,00,00,00,00>
var buf2=new Buffer([1,2,3]); 
console.log(buf2) // <Buffer 01,02,03>

  var bf3 = new Buffer(5);

  var str = "12345"
  bf3.write(str,0,6); //将字符串写入buffer对象内
  console.log(bf3) //31,32,33,34,35

Buffer.toString()方法 将buffer对象元素转换为字符串

注意:一个Buffer对象的大小,在创建时就固定下来,创建之后不可改变

转载于:https://www.cnblogs.com/wxyblog/p/11295702.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值