This commit is contained in:
yinkanglong
2020-09-10 15:55:27 +08:00
parent e41dc12d5e
commit 6a64389ecb
32 changed files with 775 additions and 121 deletions

View File

@@ -0,0 +1,93 @@
# 原型与继承
[参考文献](cnblogs.com/loveyaxin/p/11151586.html)
## 1 函数与对象的表面关系
* 函数是函数,对象是对象。
* 函数本身也是特殊对象typeof 返回function。函数返回值可以是对象。
* 对象可以包含函数属性。typeof 返回object
* 函数可以作为对象的模板称为对象构造器typeof返回值返回object。常见的内置类型构造器首字母大写通过new关键字返回新的对象。new Arraynew Function()
* 变量可以指向函数,也可以指向对象。
* 函数的定义方法 function(){}匿名函数或者function name(){}
* 对象的定义方法 new Creator();或者{}。从对象构造器中创建对象或者直接创建对象。通过new创建的对象proto指向Creator()对象构造器。通过{}创建的对象proto指向Object()对象构造起会形成proto链。
## 2 原型
### 函数原型
* 原型的概念每一个javascript对象(除null外)创建的时候,就会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型中“继承”属性。
```javascript
function Person(age) {
this.age = age
}
Person.prototype.name = 'kavin'
var person1 = new Person()
var person2 = new Person()
console.log(person1.name) //kavin
console.log(person2.name) //kavin
```
* 在JavaScript中每个函数都有一个prototype属性这个属性指向函数的原型对象。函数的prototype指向了一个对象而这个对象正是调用构造函数时创建的实例的原型也就是person1和person2的原型。
![](img/prototype.png)
### 对象原型
* 每个对象(除null外)都会有的属性叫做__proto__这个属性会指向该对象的原型。
![](img/proto.png)
### construtor构造函数
* 每个原型都有一个constructor属性指向该关联的构造函数。
![](img/constructor.png)
### 实例与原型
* 当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。
```
function Person() {
}
Person.prototype.name = 'Kevin';
var person = new Person();
person.name = 'Daisy';
console.log(person.name) // Daisy
delete person.name;
console.log(person.name) // Kevin
```
### 原型的原型
原型也是一个对象,既然是对象,我们就可以用最原始的方式创建它,那就是:
```
var obj = new Object();
obj.name = 'Kevin'
console.log(obj.name) // Kevin
```
其实原型对象就是通过 Object 构造函数生成的,结合之前所讲,实例的 __proto__ 指向构造函数的 prototype .
![](img/proto_proto.png)
### 原型链
* 简单的回顾一下构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么假如我们让原型对象等于另一个类型的实例,结果会怎样?显然,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立。如此层层递进,就构成了实例与原型的链条。这就是所谓的原型链的基本概念。
![](img/protolist.png)
### 补充
* 函数的原型属性指向原型对象。prototype属性。
* 对象的原型属性指向原型对象。__proto__属性。
* 原型对象是实例的原型。
* 原型对象的constructor指向对象构造器也就是函数。
* 原型对象通过constructor和对象构造器通过prototype构成了指向环。
* 原型对象本身也是实例她本身也具有原型对象。通过原型对象的原型对象形成了原型链。原型对象通过__prpto__属性指向自己的原型。
> 也就是说原型对象有两个属性一个是构造器constructor指向对象构造器。另一个属性指向自身的原型对象。普通对象没有constructor属性。

View File

@@ -1 +0,0 @@
const fs = re

View File

@@ -1,86 +0,0 @@
> nodejs最著名的地方可能就是异步回调了吧。通过异步非阻塞的编程方式通过回调函数实现了通信。可以实现宏观上的单线程并发。
## ES6新特性
### let const
let const 都是块作用域。不是函数的作用域。或是对象作用域。
### 模板字符串
```
name = 'zhangsan'
age = 10
console.log(`${name}${age}`)
```
### 箭头函数
```
(err,data)={
}
```
## 2 异步方法获取数据
### 不能通过返回值获取异步方法中的数据
因为return语句执行的时候内部的运算还没有结束。
### 通过回调函数获取异步方法中的数据
```
function getData(callback){
//异步调用
setTimeout(function(){
var name = "zhangsan ";
callback(name)
},1000);
}
getData(function(aaa){
console.log(aaa);
})
```
### 通过promise获取异步方法中的数据
promise添加回调方法。p.then调用的时候复写回调方法。与之前的回调方法很相似。相当于promise代替了之前的getData方法调用异步方法。
```
var p = new Promise(function(resolve,reject){
//异步调用
setTimeout(function(){
var name = "zhangsan ";
callback(name)
},1000);
})
p.then(function(data){
console.log(data);
})
```
### async、await和promise实现异步非阻塞通信
* async想要同步必须返回promise类型
* await等待异步方法执行完成
* promise,能够作为异步方法标记await会等被标记为promise的异步方法执行完毕后获取返回值。
```
async function test(){
return new Promise((resolv,reject)=>{
var name = "zhang san "
resolve(name);
},1000)
}
async function main(){
var data = await test();
console.log(data);
}
main
```

View File

@@ -1,5 +0,0 @@
## 1 文件读入流fs.createReadStream
## 2 文件写入流fs.createWriteStream
## 3 管道流reStream.pipe(writeStream)

View File

@@ -1,6 +0,0 @@
## 1 URL解析
## 2 URL路由

View File

@@ -1,8 +0,0 @@
# 文件渲染
页面渲染主要有两种方式,后端渲染和前端渲染。
1. 后端渲染主要在服务器将动态数据加载到HTML页面然后返回HTML页面。
2. 前端渲染主要在客户端浏览器上异步请求数据加载到当前页面然后返回HTML页面。
后端渲染速度慢,但逻辑简单。前端渲染速度快,响应速度快。

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
JavaScript/img/proto.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

5
NodeJS/10工具模块.md Normal file
View File

@@ -0,0 +1,5 @@
## 1 os模块
## 2 path模块
## 3 net模块
## 4 dns模块
## 5 domain模块

View File

@@ -6,22 +6,8 @@
* 循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。
> nodeJS提供了交互式解释器的功能可以进行基本的运算和调试。
## 2回调函数
通过回调函数实现了异步编程。
```
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
});
console.log("程序执行结束!");
```
## 3工程构建
## 2工程构建
> CommonJS是nodejs的标准。nodejs是commonjs的实现。
### 包目录构成
* package.json 包描述文件

26
NodeJS/3回调函数.md Normal file
View File

@@ -0,0 +1,26 @@
## 2回调函数
> 在javascript中一切都是变量一起都是对象基本数据类型的变量、函数类型的变量、对象类型的变量。也就是说变量可以指向基础数据类型、函数数据类型、对象数据类型等。
通过回调函数实现了异步编程。
### 同步阻塞
```
var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("程序执行结束!");
```
### 异步回调
```
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
});
console.log("程序执行结束!");
```

47
NodeJS/4模块系统.md Normal file
View File

@@ -0,0 +1,47 @@
# 1 说明
* 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。一个 Node.js 文件就是一个模块这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。
* Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。
## 2示例
### 代码示例
* main.js
```java
var hello = require('./hello');
hello.world();
```
* hello.js
```java
exports.world = function() {
console.log('Hello World');
}
```
### 暴露对象
```java
//hello.js
function Hello() {
var name;
this.setName = function(thyName) {
name = thyName;
};
this.sayHello = function() {
console.log('Hello ' + name);
};
};
module.exports = Hello;
```
```java
//main.js
var Hello = require('./hello');
hello = new Hello();
hello.setName('BYVoid');
hello.sayHello();
```
### require过程
![](img/nodejs-require.jpg)

113
NodeJS/5buffer模块.md Normal file
View File

@@ -0,0 +1,113 @@
# buffer模块
## 1 模块说明
### 作用
* Buffer 类,该类用来创建一个专门存放二进制数据的缓存区
### Node.js 目前支持的字符编码包括:
* ascii - 仅支持 7 位 ASCII 数据。如果设置去掉高位的话,这种编码是非常快的。
* utf8 - 多字节编码的 Unicode 字符。许多网页和其他文档格式都使用 UTF-8 。
* utf16le - 2 或 4 个字节,小字节序编码的 Unicode 字符。支持代理对U+10000 至 U+10FFFF
* ucs2 - utf16le 的别名。
* base64 - Base64 编码。
* latin1 - 一种把 Buffer 编码成一字节编码的字符串的方式。
* binary - latin1 的别名。
* hex - 将每个字节编码为两个十六进制字符。
## 2 模块应用
### 创建Buffer 类
* Buffer.alloc(size[, fill[, encoding]]) 返回一个指定大小的 * Buffer 实例,如果没有设置 fill则默认填满 0
* Buffer.allocUnsafe(size) 返回一个指定大小的 Buffer 实例,但是它不会被初始化,所以它可能包含敏感的数据
* Buffer.allocUnsafeSlow(size)
* Buffer.from(array) 返回一个被 array 的值初始化的新的 Buffer 实例(传入的 array 的元素只能是数字,不然就会自动被 0 覆盖)
* Buffer.from(arrayBuffer[, byteOffset[, length]]) 返回一个新建的与给定的 ArrayBuffer 共享同一内存的 Buffer。
* Buffer.from(buffer) 复制传入的 Buffer 实例的数据并返回一个新的Buffer 实例
* Buffer.from(string[, encoding]) 返回一个被 string 的值初始化的新的 Buffer 实例
```
// 创建一个长度为 10、且用 0 填充的 Buffer。
const buf1 = Buffer.alloc(10);
// 创建一个长度为 10、且用 0x1 填充的 Buffer。
const buf2 = Buffer.alloc(10, 1);
// 创建一个长度为 10、且未初始化的 Buffer。
// 这个方法比调用 Buffer.alloc() 更快,
// 但返回的 Buffer 实例可能包含旧数据,
// 因此需要使用 fill() 或 write() 重写。
const buf3 = Buffer.allocUnsafe(10);
// 创建一个包含 [0x1, 0x2, 0x3] 的 Buffer。
const buf4 = Buffer.from([1, 2, 3]);
// 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
const buf5 = Buffer.from('tést');
// 创建一个包含 Latin-1 字节 [0x74, 0xe9, 0x73, 0x74] 的 Buffer。
const buf6 = Buffer.from('tést', 'latin1');
```
### 写入缓冲区
```
buf.write(string[, offset[, length]][, encoding])
```
* string - 写入缓冲区的字符串。
* offset - 缓冲区开始写入的索引值,默认为 0 。
* length - 写入的字节数,默认为 buffer.length
* encoding - 使用的编码。默认为 'utf8' 。
### 读取缓冲区
```
buf.toString([encoding[, start[, end]]])
```
* encoding - 使用的编码。默认为 'utf8' 。
* start - 指定开始读取的索引位置,默认为 0。
* end - 结束位置,默认为缓冲区的末尾。
### 将 Buffer 转换为 JSON 对象
```javascript
buf.toJSON()
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
const json = JSON.stringify(buf);
// 输出: {"type":"Buffer","data":[1,2,3,4,5]}
console.log(json);
const copy = JSON.parse(json, (key, value) => {
return value && value.type === 'Buffer' ?
Buffer.from(value.data) :
value;
});
// 输出: <Buffer 01 02 03 04 05>
console.log(copy);
```
### 缓冲区合并
```
Buffer.concat(list[, totalLength])
```
* list - 用于合并的 Buffer 对象数组列表。
* totalLength - 指定合并后Buffer对象的总长度。

122
NodeJS/6events模块.md Normal file
View File

@@ -0,0 +1,122 @@
# 事件循环
## 1 模块说明
### 过程
* Node.js 是单进程单线程应用程序
* Node.js 几乎每一个 API 都是支持回调函数的。
* Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。
* Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.
### 示例
![](img/event_loop.jpg)
* Node.js 使用事件驱动模型当web server接收到请求就把它关闭然后进行处理然后去服务下一个web请求。当这个请求完成它被放回处理队列当到达队列开头这个结果被返回给用户。
* 非阻塞式IO事件驱动IO
* 事件相当于一个主题(Subject),而所有注册到这个事件上的处理函数相当于观察者(Observer)。
## 2 模块应用
### 示例
```javascript
// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();
// 创建事件处理程序
var connectHandler = function connected() {
console.log('连接成功。');
// 触发 data_received 事件
eventEmitter.emit('data_received');
}
// 绑定 connection 事件处理程序
eventEmitter.on('connection', connectHandler);
// 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received', function(){
console.log('数据接收成功。');
});
// 触发 connection 事件
eventEmitter.emit('connection');
console.log("程序执行完毕。");
```
### 方法
1. addListener(event, listener)
为指定事件添加一个监听器到监听器数组的尾部。
2. on(event, listener)
为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。
server.on('connection', function (stream) {
console.log('someone connected!');
});
3. once(event, listener)
为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。
server.once('connection', function (stream) {
console.log('Ah, we have our first user!');
});
4. removeListener(event, listener)
移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。
它接受两个参数,第一个是事件名称,第二个是回调函数名称。
```
var callback = function(stream) {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
```
5. removeAllListeners([event])
移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。
6. setMaxListeners(n)
默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于提高监听器的默认限制的数量。
7. listeners(event)
返回指定事件的监听器数组。
8. emit(event, [arg1], [arg2], [...])
按监听器的顺序执行执行每个监听器,如果事件有注册监听返回 true否则返回 false
### 应用
```
var events = require('events');
var eventEmitter = new events.EventEmitter();
// 监听器 #1
var listener1 = function listener1() {
console.log('监听器 listener1 执行。');
}
// 监听器 #2
var listener2 = function listener2() {
console.log('监听器 listener2 执行。');
}
// 绑定 connection 事件,处理函数为 listener1
eventEmitter.addListener('connection', listener1);
// 绑定 connection 事件,处理函数为 listener2
eventEmitter.on('connection', listener2);
var eventListeners = eventEmitter.listenerCount('connection');
console.log(eventListeners + " 个监听器监听连接事件。");
// 处理 connection 事件
eventEmitter.emit('connection');
// 移除监绑定的 listener1 函数
eventEmitter.removeListener('connection', listener1);
console.log("listener1 不再受监听。");
// 触发连接事件
eventEmitter.emit('connection');
eventListeners = eventEmitter.listenerCount('connection');
console.log(eventListeners + " 个监听器监听连接事件。");
console.log("程序执行完毕。");
```

37
NodeJS/7http&url模块.md Normal file
View File

@@ -0,0 +1,37 @@
# http&url模块
## 1 模块说明
* 用来构建nodejs的原声的服务器程序。
## 2 代码示例
### server.js
```java
var http = require("http");
var url = require("url");
function start(route) {
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
console.log("Request for " + pathname + " received.");
route(pathname);
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;
```
### index.js
```java
var server = require("./server");
var router = require("./router");
server.start(router.route);
```

15
NodeJS/8全局对象.md Normal file
View File

@@ -0,0 +1,15 @@
## 1 全局变量
* __filename 表示当前正在执行的脚本的文件名。
* __dirname 表示当前执行脚本所在的目录。
* console 用于提供控制台标准输出,它是由 Internet Explorer 的 JScript 引擎提供的调试工具,后来逐渐成为浏览器的实施标准。
* process 是一个全局变量用于描述当前Node.js 进程状态的对象,提供了一个与操作系统的简单接口。
## 全局函数
* setTimeout(cb, ms) 全局函数在指定的毫秒(ms)数后执行指定函数(cb)。setTimeout() 只执行一次指定函数。返回一个代表定时器的句柄值。
* clearTimeout( t ) 全局函数用于停止一个之前通过 setTimeout() 创建的定时器。 参数 t 是通过 setTimeout() 函数创建的定时器。
* setInterval(cb, ms) 全局函数在指定的毫秒(ms)数后执行指定函数(cb)。

291
NodeJS/9fs模块.md Normal file
View File

@@ -0,0 +1,291 @@
# fs模块
## 1 流读写
### 流的四种状态
* Readable - 可读操作。
* Writable - 可写操作。
* Duplex - 可读可写操作.
* Transform - 操作被写入数据,然后读出结果。
### 流对象事件
* data - 当有数据可读时触发。
* end - 没有更多的数据可读时触发。
* error - 在接收和写入过程中发生错误时触发。
* finish - 所有数据已被写入到底层系统时触发。
### 流读取
```js
var fs = require("fs");
var data = '';
// 创建可读流
var readerStream = fs.createReadStream('input.txt');
// 设置编码为 utf8。
readerStream.setEncoding('UTF8');
// 处理流事件 --> data, end, and error
readerStream.on('data', function(chunk) {
data += chunk;
});
readerStream.on('end',function(){
console.log(data);
});
readerStream.on('error', function(err){
console.log(err.stack);
});
console.log("程序执行完毕");
```
### 流写入
```js
var fs = require("fs");
var data = '菜鸟教程官网地址www.runoob.com';
// 创建一个可以写入的流,写入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');
// 使用 utf8 编码写入数据
writerStream.write(data,'UTF8');
// 标记文件末尾
writerStream.end();
// 处理流事件 --> data, end, and error
writerStream.on('finish', function() {
console.log("写入完成。");
});
writerStream.on('error', function(err){
console.log(err.stack);
});
console.log("程序执行完毕");
```
### 管道流
通过读取一个文件内容并将内容写入到另外一个文件中。
```js
var fs = require("fs");
// 创建一个可读流
var readerStream = fs.createReadStream('input.txt');
// 创建一个可写流
var writerStream = fs.createWriteStream('output.txt');
// 管道读写操作
// 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
readerStream.pipe(writerStream);
console.log("程序执行完毕");
```
### 链式流
链式是通过连接输出流到另外一个流并创建多个流操作链的机制。链式流一般用于管道操作。接下来我们就是用管道和链式来压缩和解压文件。
压缩过程链式流:
```js
var fs = require("fs");
var zlib = require('zlib');
// 压缩 input.txt 文件为 input.txt.gz
fs.createReadStream('input.txt')
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('input.txt.gz'));
console.log("文件压缩完成。");
```
解压过程链式流
```js
var fs = require("fs");
var zlib = require('zlib');
// 解压 input.txt.gz 文件为 input.txt
fs.createReadStream('input.txt.gz')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('input.txt'));
console.log("文件解压完成。");
```
## 2 文件操作
### 文件读取
```js
var fs = require("fs");
// 异步读取
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("异步读取: " + data.toString());
});
// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());
console.log("程序执行完毕。");
```
### 打开文件
### 获取文件信息
### 写入文件
### 读取文件
### 关闭文件
### 截取文件
### 删除文件
### 创建目录
### 读取目录
### 删除目录
## 3 fs...
1 fs.rename(oldPath, newPath, callback)
异步 rename().回调函数没有参数,但可能抛出异常。
2 fs.ftruncate(fd, len, callback)
异步 ftruncate().回调函数没有参数,但可能抛出异常。
3 fs.ftruncateSync(fd, len)
同步 ftruncate()
4 fs.truncate(path, len, callback)
异步 truncate().回调函数没有参数,但可能抛出异常。
5 fs.truncateSync(path, len)
同步 truncate()
6 fs.chown(path, uid, gid, callback)
异步 chown().回调函数没有参数,但可能抛出异常。
7 fs.chownSync(path, uid, gid)
同步 chown()
8 fs.fchown(fd, uid, gid, callback)
异步 fchown().回调函数没有参数,但可能抛出异常。
9 fs.fchownSync(fd, uid, gid)
同步 fchown()
10 fs.lchown(path, uid, gid, callback)
异步 lchown().回调函数没有参数,但可能抛出异常。
11 fs.lchownSync(path, uid, gid)
同步 lchown()
12 fs.chmod(path, mode, callback)
异步 chmod().回调函数没有参数,但可能抛出异常。
13 fs.chmodSync(path, mode)
同步 chmod().
14 fs.fchmod(fd, mode, callback)
异步 fchmod().回调函数没有参数,但可能抛出异常。
15 fs.fchmodSync(fd, mode)
同步 fchmod().
16 fs.lchmod(path, mode, callback)
异步 lchmod().回调函数没有参数但可能抛出异常。Only available on Mac OS X.
17 fs.lchmodSync(path, mode)
同步 lchmod().
18 fs.stat(path, callback)
异步 stat(). 回调函数有两个参数 err, statsstats 是 fs.Stats 对象。
19 fs.lstat(path, callback)
异步 lstat(). 回调函数有两个参数 err, statsstats 是 fs.Stats 对象。
20 fs.fstat(fd, callback)
异步 fstat(). 回调函数有两个参数 err, statsstats 是 fs.Stats 对象。
21 fs.statSync(path)
同步 stat(). 返回 fs.Stats 的实例。
22 fs.lstatSync(path)
同步 lstat(). 返回 fs.Stats 的实例。
23 fs.fstatSync(fd)
同步 fstat(). 返回 fs.Stats 的实例。
24 fs.link(srcpath, dstpath, callback)
异步 link().回调函数没有参数,但可能抛出异常。
25 fs.linkSync(srcpath, dstpath)
同步 link().
26 fs.symlink(srcpath, dstpath[, type], callback)
异步 symlink().回调函数没有参数,但可能抛出异常。 type 参数可以设置为 'dir', 'file', 或 'junction' (默认为 'file') 。
27 fs.symlinkSync(srcpath, dstpath[, type])
同步 symlink().
28 fs.readlink(path, callback)
异步 readlink(). 回调函数有两个参数 err, linkString。
29 fs.realpath(path[, cache], callback)
异步 realpath(). 回调函数有两个参数 err, resolvedPath。
30 fs.realpathSync(path[, cache])
同步 realpath()。返回绝对路径。
31 fs.unlink(path, callback)
异步 unlink().回调函数没有参数,但可能抛出异常。
32 fs.unlinkSync(path)
同步 unlink().
33 fs.rmdir(path, callback)
异步 rmdir().回调函数没有参数,但可能抛出异常。
34 fs.rmdirSync(path)
同步 rmdir().
35 fs.mkdir(path[, mode], callback)
S异步 mkdir(2).回调函数没有参数,但可能抛出异常。 访问权限默认为 0777。
36 fs.mkdirSync(path[, mode])
同步 mkdir().
37 fs.readdir(path, callback)
异步 readdir(3). 读取目录的内容。
38 fs.readdirSync(path)
同步 readdir().返回文件数组列表。
39 fs.close(fd, callback)
异步 close().回调函数没有参数,但可能抛出异常。
40 fs.closeSync(fd)
同步 close().
41 fs.open(path, flags[, mode], callback)
异步打开文件。
42 fs.openSync(path, flags[, mode])
同步 version of fs.open().
43 fs.utimes(path, atime, mtime, callback)
44 fs.utimesSync(path, atime, mtime)
修改文件时间戳,文件通过指定的文件路径。
45 fs.futimes(fd, atime, mtime, callback)
46 fs.futimesSync(fd, atime, mtime)
修改文件时间戳,通过文件描述符指定。
47 fs.fsync(fd, callback)
异步 fsync.回调函数没有参数,但可能抛出异常。
48 fs.fsyncSync(fd)
同步 fsync.
49 fs.write(fd, buffer, offset, length[, position], callback)
将缓冲区内容写入到通过文件描述符指定的文件。
50 fs.write(fd, data[, position[, encoding]], callback)
通过文件描述符 fd 写入文件内容。
51 fs.writeSync(fd, buffer, offset, length[, position])
同步版的 fs.write()。
52 fs.writeSync(fd, data[, position[, encoding]])
同步版的 fs.write().
53 fs.read(fd, buffer, offset, length, position, callback)
通过文件描述符 fd 读取文件内容。
54 fs.readSync(fd, buffer, offset, length, position)
同步版的 fs.read.
55 fs.readFile(filename[, options], callback)
异步读取文件内容。
56 fs.readFileSync(filename[, options])
57 fs.writeFile(filename, data[, options], callback)
异步写入文件内容。
58 fs.writeFileSync(filename, data[, options])
同步版的 fs.writeFile。
59 fs.appendFile(filename, data[, options], callback)
异步追加文件内容。
60 fs.appendFileSync(filename, data[, options])
The 同步 version of fs.appendFile.
61 fs.watchFile(filename[, options], listener)
查看文件的修改。
62 fs.unwatchFile(filename[, listener])
停止查看 filename 的修改。
63 fs.watch(filename[, options][, listener])
查看 filename 的修改filename 可以是文件或目录。返回 fs.FSWatcher 对象。
64 fs.exists(path, callback)
检测给定的路径是否存在。
65 fs.existsSync(path)
同步版的 fs.exists.
66 fs.access(path[, mode], callback)
测试指定路径用户权限。
67 fs.accessSync(path[, mode])
同步版的 fs.access。
68 fs.createReadStream(path[, options])
返回ReadStream 对象。
69 fs.createWriteStream(path[, options])
返回 WriteStream 对象。
70 fs.symlink(srcpath, dstpath[, type], callback)
异步 symlink().回调函数没有参数,但可能抛出异常。

View File

@@ -0,0 +1,25 @@
// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();
// 创建事件处理程序
var connectHandler = function connected() {
console.log('连接成功。');
// 触发 data_received 事件
eventEmitter.emit('data_received');
}
// 绑定 connection 事件处理程序
eventEmitter.on('connection', connectHandler);
// 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received', function(){
console.log('数据接收成功。');
});
// 触发 connection 事件
eventEmitter.emit('connection');
console.log("程序执行完毕。");

BIN
NodeJS/img/event_loop.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB