Node.js v0.10.18手册&文档 http://nodeapi.ucdok.com/#/api/
Node.js v0.12.0文档 https://nodejs.org/api/
Node.js入门经典系列学习 http://www.myexception.cn/javascript/1702369.html
Node入门 http://www.nodebeginner.org/index-zh-cn.html#handling-post-requests
node.js是首个将异步大规模带到应用层面的平台;但是异步在流程控制中,业务表达并不适合自然语言的线性思维
nodejs适合于数据密集型实时的web程序,DIRT
node中,I/O几乎总是在主事件轮询之外进行,使得服务器可以一直处于高效并且随时能够做出响应的状态,就想NGINX一样
在node 的世界里有两种响应逻辑管理方式:回调和事件监听
node存储机制:(多用户程序,数据库管理系统靠谱)
- 内存存储
- 基于文件存储:配置文件等
- 关系型数据库存储
- noSql数据库存储
require 是Node中少数几个同步I/O操作之一。
- 在程序中I/o密集的地方尽量不用require,所有同步调用都会阻塞Node,会出现性能问题,因此,通常都只在程序最初加载时才使用require和其他同步操作
- require返回引用模块中定义的exports对象中的内容
socket.io websocket
http: 一个node HTTP服务器实例就是一个事件发射器,一个可以继承、能够添加事件发射及处理能力的类(EventEmitter)
- 服务器收到http请求,在触发回调函数之前,node会解析请求的HTTP头,并将他们作为req对象的一部分提供给请求回调,但是node不会在回调函数被出发之前开始对请求体的解析,可以在请求体正在被解析的时候处理其中的数据
- 为了提高响应速度,如果可能的话,应该在响应中带着Content-Length域一起发送,对于事项清单而言,响应主体很容易在内存中提前构建好,所以你能得到字符串的长度并一次性的将整个清单发出去,设定Content-Length域会隐含禁用node的块编码,因为要传输的数据更少,所以性能提升
cookie及cookieParser
1) cookieParser支持常规cookie、签名cookie、json cookie2) req.cookies默认用常规cookie组装,要想使用session要求的签名cookie需要在创建cookieParser实例的时传入一个加密用的字符串,用来对cookie签名和解签
3) req.cookies和req.signedCookies上的对象是随请求发过来的请求头cookie的解析结果
4) 常规cookie:常规cookie放在req.cookies中
5) 签名cookie:更适合于敏感信息,因为它可以验证cookie数据的完整性,有效的签名cookie放在req.signedCookies中(如果把常规和签名的cookie放在同一个对象中,会更容易受到攻击,因为常规cookie很容易被篡改,仿造签名cookie)
- 签名的cookie一般使用SHA-1 HMAC算法生成的加密哈希值 * name:luna * cookieParser将cookie编码为luna.JJOIJFN798FADJH6765FDSHJ3 * 请求过来的从cookie会被解析为req.signedCookies.name:luna
6) JSON cookie:带有前缀j:的串行化的JSON,可以是签名的,也可以是未签名的。
- 请求头:‘Cookie : foo=bar, bar =j: {"foo":"bar"}’ 未签名的JSON Cookie - 解析为:{foo : 'bar' , bar :{foo:'bar'}} - 请求头:‘Cookie : foo=j:{ \"item\":[1] }.kj8JKHKGIU89565675jhhjg678GHFKJFD} ' 签名的JSON Cookie - 解析为:{ foo : { item : [1] } }
7) 设定出站cookie:
- 通过Set-Cookie设定响应头向http客户端写出站cookie * res.setHeader('Set-Cookie','name=mahui; Expires =Tue,08 Jun 2014 10:18:30 GMT' );