学习资源 https://nodejs.org/ https://www.npmjs.com/ https://github.com/ stackoverflow.com技术问答社区
版本:偶数位为稳定版、奇数为非稳定版
变量污染、方法重写等,JavaScript缺少模块管理机制。命名空间、定义规范
commonjs规范:模块、包、二进制等。
模块(定义、标识、规范)
模块的分类:核心模块、文件模块、第三方模块
通过文件路径/文件名引入模块
模块的流程:创建模块teacher.js、导出模块exports.add=function(){}、加载模块var teacher=requeire('./teacher.js')、使用模块teacher.add('Scott')
规范与实现的相互促进commonjs nodejs/Couchdb npm install
Node.js API
URL网址解析
url.parse(urlStr[, parseQueryString][, slashesDenoteHost])
eg:node url.parse('http://www.imooc.com/course/list')返回的结果中query为字符串
node url.parse('http://www.imooc.com/course/list?form=scott&course=node#floor1',true)返回的结果中query被解析为对象
node url.parse('//www.imocc.com/course/list',true)返回的结果中path/pathname不正确,且host/slashes/hostname均为空
node url.parse('//www.imocc.com/course/list',true,true)返回的结果中以上信息均存在。
url.format(urlObj)
eg:node url.format({ protocol: 'http:',
slashes: true,
auth: null,
host: 'www.imooc.com:8080',
port: '8080',
hostname: 'www.imooc.com',
hash: '#floor1',
search: '?form=scott&course=node',
query: 'form=scott&course=node',
pathname: '/course/list',
path: '/course/list?form=scott&course=node',
href: 'http://www.imooc.com:8080/course/list?form=scott&course=node#floor1' })
url.resolve(from, to)
eg:node url.resolve('http://imooc.com/','/course/list')
QueryString参数处理
querystring.stringify(obj[, sep][, eq][, options])
将参数序列化
eg:querystring.stringify({name:'scott',course:['jade','node'],form:''})
结果:'name=scott&course=jade&course=node&form='
eg:querystring.stringify({name:'scott',course:['jade','node'],form:''},',')
结果:'name=scott,course=jade,course=node,form='
eg:querystring.stringify({name:'scott',course:['jade','node'],form:''},',',':')
结果:'name:scott,course:jade,course:node,form:'
querystring.parse(str[, sep][, eq][, options])
解析
eg:querystring.parse('name=scott&course=jade&course=node&form=')
或者querystring.parse('name=scott,course=jade,course=node,form=',',')
或者querystring.parse('name:scott,course:jade,course:node,form:',',',':')
结果:{ name: 'scott',
course: [ 'jade', 'node' ],
form: '' }
querystring.escape
转义
eg:querystring.escape('<哈哈>')
结果:'%3C%E5%93%88%E5%93%88%3E'
querystring.unescape
反转义
eg:querystring.unescape('%3C%E5%93%88%E5%93%88%3E')
结果:'<哈哈>'
HTTP协议:http客户端发起请求,创建端口;http服务器在端口监听客户端请求;http服务器向客户端返回状态和内容
1、浏览器搜索自身的DNS缓存eg:chrome://net-internals/#dns
2、搜索操作系统自身的DNS缓存(浏览器没有找到自身的缓存或缓存已失效)
3、读取本地的HOST文件(浏览器没有找到操作系统自身的缓存或缓存已失效)
4、浏览器发起一个DNS的一个系统调用(浏览器没有找到本地的HOST文件的缓存或缓存已失效)
宽带运营商服务器查看本身缓存
运营商服务器发起一个迭代DNS解析的请求
运营商服务器把结果返回操作系统内核同时缓存起来
操作系统内核把结果返回浏览器
最终浏览器拿到了www.imooc.com对应的IP地址
5、浏览器获得域名对应的IP地址后,发起HTTP“三次握手”
6、TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求。
7、服务器端接收到请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回给浏览器。
8、浏览器拿到了数据后,在解析和渲染这个页面的时候,里面的JS/CSS/图片静态资源,他们同样也是一个个HTTP请求都需要经过上面的主要的七个步骤
9、浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现出来
HTTP模块 支持更多特性、不缓冲请求和响应、处理流相关
作用域:和变量有关 分为局部作用域和全局作用域。
上下文:this关键字有关
HTTP性能测试
D:\Program Files (x86)\xampp\apache\bin
ab -n1000 -c10 http://www.baidu.com/
官方建议对一个事件不要设置超过10个监听器
版本:偶数位为稳定版、奇数为非稳定版
变量污染、方法重写等,JavaScript缺少模块管理机制。命名空间、定义规范
commonjs规范:模块、包、二进制等。
模块(定义、标识、规范)
模块的分类:核心模块、文件模块、第三方模块
通过文件路径/文件名引入模块
模块的流程:创建模块teacher.js、导出模块exports.add=function(){}、加载模块var teacher=requeire('./teacher.js')、使用模块teacher.add('Scott')
规范与实现的相互促进commonjs nodejs/Couchdb npm install
Node.js API
URL网址解析
url.parse(urlStr[, parseQueryString][, slashesDenoteHost])
eg:node url.parse('http://www.imooc.com/course/list')返回的结果中query为字符串
node url.parse('http://www.imooc.com/course/list?form=scott&course=node#floor1',true)返回的结果中query被解析为对象
node url.parse('//www.imocc.com/course/list',true)返回的结果中path/pathname不正确,且host/slashes/hostname均为空
node url.parse('//www.imocc.com/course/list',true,true)返回的结果中以上信息均存在。
url.format(urlObj)
eg:node url.format({ protocol: 'http:',
slashes: true,
auth: null,
host: 'www.imooc.com:8080',
port: '8080',
hostname: 'www.imooc.com',
hash: '#floor1',
search: '?form=scott&course=node',
query: 'form=scott&course=node',
pathname: '/course/list',
path: '/course/list?form=scott&course=node',
href: 'http://www.imooc.com:8080/course/list?form=scott&course=node#floor1' })
url.resolve(from, to)
eg:node url.resolve('http://imooc.com/','/course/list')
QueryString参数处理
querystring.stringify(obj[, sep][, eq][, options])
将参数序列化
eg:querystring.stringify({name:'scott',course:['jade','node'],form:''})
结果:'name=scott&course=jade&course=node&form='
eg:querystring.stringify({name:'scott',course:['jade','node'],form:''},',')
结果:'name=scott,course=jade,course=node,form='
eg:querystring.stringify({name:'scott',course:['jade','node'],form:''},',',':')
结果:'name:scott,course:jade,course:node,form:'
querystring.parse(str[, sep][, eq][, options])
解析
eg:querystring.parse('name=scott&course=jade&course=node&form=')
或者querystring.parse('name=scott,course=jade,course=node,form=',',')
或者querystring.parse('name:scott,course:jade,course:node,form:',',',':')
结果:{ name: 'scott',
course: [ 'jade', 'node' ],
form: '' }
querystring.escape
转义
eg:querystring.escape('<哈哈>')
结果:'%3C%E5%93%88%E5%93%88%3E'
querystring.unescape
反转义
eg:querystring.unescape('%3C%E5%93%88%E5%93%88%3E')
结果:'<哈哈>'
HTTP协议:http客户端发起请求,创建端口;http服务器在端口监听客户端请求;http服务器向客户端返回状态和内容
1、浏览器搜索自身的DNS缓存eg:chrome://net-internals/#dns
2、搜索操作系统自身的DNS缓存(浏览器没有找到自身的缓存或缓存已失效)
3、读取本地的HOST文件(浏览器没有找到操作系统自身的缓存或缓存已失效)
4、浏览器发起一个DNS的一个系统调用(浏览器没有找到本地的HOST文件的缓存或缓存已失效)
宽带运营商服务器查看本身缓存
运营商服务器发起一个迭代DNS解析的请求
运营商服务器把结果返回操作系统内核同时缓存起来
操作系统内核把结果返回浏览器
最终浏览器拿到了www.imooc.com对应的IP地址
5、浏览器获得域名对应的IP地址后,发起HTTP“三次握手”
6、TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求。
7、服务器端接收到请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回给浏览器。
8、浏览器拿到了数据后,在解析和渲染这个页面的时候,里面的JS/CSS/图片静态资源,他们同样也是一个个HTTP请求都需要经过上面的主要的七个步骤
9、浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现出来
HTTP模块 支持更多特性、不缓冲请求和响应、处理流相关
作用域:和变量有关 分为局部作用域和全局作用域。
上下文:this关键字有关
HTTP性能测试
D:\Program Files (x86)\xampp\apache\bin
ab -n1000 -c10 http://www.baidu.com/
官方建议对一个事件不要设置超过10个监听器