20150815 Node.js基础

来源:互联网 发布:淘宝网买手机壳 编辑:程序博客网 时间:2024/05/22 12:00
学习资源 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个监听器
0 0
原创粉丝点击