文章目录
一、引入其他模块
在node中,通过required()函数来引入外部的模块
required()可以传递一个文件的路径作为参数,node将会自动根据该路径来引入模块
使用require()引入模块以后,该函数会返回一个对象,这个对象代表的是引入的模块
在Node中,一个js文件就是一个模块
在Node中,每一个js文件中的js代码都是独立运行在一个函数中的
所以一个模块中的变量和函数在其他模块中无法访问
二、向外部暴露属性或方法
我们可以通过exports来向外部暴露变量和方法
只需要将需要暴露给外部的变量或方法设置为exports的属性
三、定义文件模块
定义一个模块 math,该模块中提供两个方法:
- add(a, b):求两个数的和
- mul(a, b):求两个数的积
四、全局对象global
在node中有一个全局对象 global,它的作用和网页中window类似
在全局中创建的变量, 都会作为global的属性保存
在全局中创建的函数, 都会作为global的方法保存
五、node执行模块时做的操作
当node在执行模块中的代码时, 它会首先在代码的最顶部添加如下代码
function(exports, require, module, __filename, __dirname){
}
参数详解
- exports : 该对象用来将变量或函数暴露到外部
- require : 函数, 用来引入外部的模块
- module :代表的是当前模块本身
- __filename :当前模块的完整路径
- __dirname :当前模块所在的文件夹的路径
六、包
将一组相关的模块组合到一起,形参一组完整的工具,就称为包
包由两部分组成, 包结构和包描述文件
包结构 : 用于组织包中的各种文件
包描述文件 :描述包的相关信息,以供外部读取分析。
七、npm
- npm init : 初始化, 创建package.json文件
- npm install xxx : 安装xxx模块
- npm remove 包名 :删除包
- npm install : 下载当前项目所依赖的包
- npm install 包名 --save : 安装包并添加到依赖中。
设置淘宝镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org
八、Buffer缓冲区
Buffer的结构和数组很像
数组中不能存储二进制的文件,而Buffer就是专门用来存储二进制数据
在buffer中存储的都是二进制数据,但是在显示时都是以16紧追的形式显示的
buffer中的一个元素,占用内存的一个字节
1. 将一个字符串保存到Buffer中
var buf = Buffer.from(str);
consloe.log(buf.length) // 占用内存的大小
2. 创建一个指定大小的buffer
var buf2 = Buffer.alloc(1024)
3. 通过索引,来操作buf中的元素
buf2[0] = 88
console.log(buf2); // <Buffer 58 00 00 00 00 00 00 00 00 00>
九、文件系统
同步文件系统会阻塞程序的执行
1. 引入模块
fs是核心模块,直接引入不需要下载
var fs = require("fs")
2. 打开文件
fs.openSync(path, flags[, mode])
- path : 要打开文件的路径
- flags : 打开文件要做的操作类型
- r : 只读
- w :可写
- model :设置文件的操作权限, 一般不传
返回值 : 该方法会返回一个文件的描述符作为结果
var fs = require("fs")
var fd = fs.openSync("hello.txt", "w")
console.log(fd);
3. 向文件中写入内容
fs.writeSync(fd, string[, position[, encoding]])
- fd : 文件描述符
- string :要写入的内容
var fs = require("fs")
var fd = fs.openSync("hello.txt", "w")
fs.writeSync(fd, "222")
4. 关闭文件
fs.closeSync(fd)
5. 异步文件写入
fs.open(path[, flags[, mode]], callback)
- path : 要打开文件的路径
- flags : 打开文件要做的操作类型
- r : 只读
- w :可写
- model :设置文件的操作权限, 一般不传
- callback : 回调函数,异步调用的方法,结果都是通过回调函数的参数返回的。
- err :错误对象,如果没有错误则为null
- fd : 文件的描述符
var fs = require("fs")
// 异步打开文件的方法
fs.open("hello.txt", "w", function(error, fd){
console.log(fd); // 3
})
6. 简单文件写入*
fs.writeFile(file, data[, options], callback)
- path : 要操作文件的路径
- data : 要写入的数据
- options |
- encoding | 默认值: ‘utf8’
- mode 默认值: 0o666
- flag 默认值: ‘w’。
- signal 允许中止正在进行的写入文件
- callback : 回调函数,异步调用的方法,结果都是通过回调函数的参数返回的。
var fs = require("fs")
// 简单写入
fs.writeFile("hello1.txt", "w", function (error) {
if(!error) {
console.log("文件写入成功");
}else {
console.log("error");
}
})
7. 流式文件写入
fs.createWriteStream(path[, options])
- path : 文件路径
- options : 配置的参数
var ws = fs.createWriteStream("hello.txt")
通过ws向文件中输出内容
ws.write("通过可写流写入文件的内容")
监听流的打开和关闭
可以通过监听流的open和close事件来监听流的打开和关闭
ws.on("open", function(){
conslole.log("流打开了")
})
关闭流
ws.end()
8. 简单文件读取 *
fs.readFile(path[, options], callback)
var fw = fs.readFile("hello2.txt", function (error, data) {
console.log(data.toString());
})
9. 将可读流中的内容,直接输出到可写流中
// 创建一个可读流
var rs = fs.createReadStream("hello.txt")
// 创建一个可写流
var ws = fs.createWriteStream("hello1.txt")
// 将可读流中的内容,直接输出到可写流中
rs.pipe(ws)