Site Overlay

了不起的Node.js 笔记

非阻塞IO

Node中的全局变量

module 和 exports,默认情况下每个模块暴露一个空对象

exports是对module.exports的引用

// a.js
exports.name = 'Jennifer';
// index.js
const a = require('./a.js');
console.log(a.name);

也可以对module.exports重写

// a.js
module.exports = add;

function add(a, b) {
    return a + b;
}
// index.js
const add = require('./a.js');

console.log(add); // add就是function本身

流对象

默认编码是 Buffer

  • console.log会在指定字符后面加上\n换行写到stdout流中
  • process全局对象有三个流对象
    • stdin:标准输入,默认状态是暂停的
    • stdout:标准输出
    • stderr:标准错误

TCP(传输控制协议)

是一个面向连接的协议,一种传输层协议,他能将数据完整有序的从一台计算机传输到另一台计算机。http这样的协议都是基于TCP协议的。

Node中的http.Server继承自net.Server(net是TCP模块)

IP协议

该协议是基于数据报传输的,送达的顺序是无序的,但数据包包含了标识该连接以及数据流顺序的信息。所以使用TCP/IP和服务器建立连接后能让数据包送达时是有序的

套接字(socket)

对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。

Node中的end和close事件

end():当客户端显示关闭TCP连接时触发
close():连接发生错误时候触发,但一般两种情况都会触发close

中间件

就是一个js函数,next() ,use()

Express

是构建于connect之上的

Redis

一种数据库,结构化数据服务器,内存存储,搭配可配置的磁盘持久化思路不支持嵌套数据存储

可支持的数据类型:
1. 字符串(string)
– 命令:set(设置)
– incr(递增)
2. 列表(list)
– rpush(右侧推入)
– lpush(左侧推入)
– lrange(返回指定范围的元素)
3. 数据集(set)
– sadd(添加)
– smembers(获取所有)
– srem(删除),
4. 哈希(hash)
– hset(设置)
– hgetall(获取指定哈希表中的键和值)
– hdel(删除)
5. 有序数据集(sorted set)

其他
– 命令大小写不敏感
– get不能获取哈希类型的值
– 清空数据库 flushall
– Client.multi意味着告诉redis客户端,所有命令必须等到exec后才执行,它作为事务的一部分,需要一起执行