Nodejs学习笔记

模块的流程
创建模块:每个js文件就是一个单独的模块teacher.js
导出模块:exports.add = function(){}
加载模块:var teacher = require(./teacher.js)
使用模块:teacher.add(“nodejs”)

Nodejs API解读

URL
url.parse(urlString[, parseQueryString[, slashesDenoteHost]])
url.format(urlObject)//parse的反操作
url.resolve(from, to)
Escaped Characters
url.parse('http://www.imooc.com/course/list')//不带参数值
//执行结果
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'www.imooc.com',
  port: null,
  hostname: 'www.imooc.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/course/list',
  path: '/course/list',
  href: 'http://www.imooc.com/course/list' }
url.parse('http://www.imooc.com/course/list?from=scott&course=node#floor1')//不带参数值
//执行结果
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'www.imooc.com',
  port: null,
  hostname: 'www.imooc.com',
  hash: '#floor1',
  search: '?from=scott&course=node',//参数值在此处显示
  query: 'from=scott&course=node',//参数值在此处显示
  pathname: '/course/list',
  path: '/course/list?from=scott&course=node',
  href: 'http://www.imooc.com/course/list?from=scott&course=node#floor1' }
 url.parse('http://www.imooc.com/course/list?from=scott&course=node#floor1',true)//多一个参数true,说明参数值会转换为诶对象形式返回
 //执行结果
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'www.imooc.com',
  port: null,
  hostname: 'www.imooc.com',
  hash: '#floor1',
  search: '?from=scott&course=node',
  query: { from: 'scott', course: 'node' },//参数值转换为对象
  pathname: '/course/list',
  path: '/course/list?from=scott&course=node',
  href: 'http://www.imooc.com/course/list?from=scott&course=node#floor1' }
url.parse('//www.imooc.com/course/list',true,true)//没有写明协议的情况下,将第三个参数设置为true,仍能正确解析URL
Url {
  protocol: null,
  slashes: true,
  auth: null,
  host: 'www.imooc.com',
  port: null,
  hostname: 'www.imooc.com',
  hash: null,
  search: '',
  query: {},
  pathname: '/course/list',
  path: '/course/list',
  href: '//www.imooc.com/course/list' }
url.resolve('http://www.imooc.com','/course/list')
'http://www.imooc.com/course/list'
Query String
querystring.parse(str[, sep[, eq[, options]]])//将字符串反序列化成对象
querystring.stringify(obj[, sep[, eq[, options]]]) //参数对象序列化成参数字符串
querystring.escape(str)//转义
querystring.unescape(str)//反转义

stringify函数实例

querystring.stringify({name:'scott',course:'jade','node']})
//执行结果
'name=scott&course=jade&course=node'

//第二个参数表示参数之间的连接符
 querystring.stringify({name:'scott',course:['jade','node']},',')
 //执行结果
'name=scott,course=jade,course=node'

//第三个参数表示查询参数内部的key value之间的连接符
querystring.stringify({name:'scott',course:'jade','node']},',',':')
//执行结果
'name:scott,course:jade,course:node'

parse函数实例

 querystring.parse('name=scott&course=jade&course=node')
{ name: 'scott', course: [ 'jade', 'node' ] }
//第二个参数默认值是以“&”分隔不同的参数,如果由其他符号分隔,需要显式设置第二个参数
 querystring.parse('name=scott,course=jade,course=node',',')
{ name: 'scott', course: [ 'jade', 'node' ] }
//第三个参数默认值是以“=”分隔参数内部的key value值,如果由其他符号分隔,需要显式设置第三个参数
 querystring.parse('name=scott,course=jade,course=node',',',':')
{ name: 'scott', course: [ 'jade', 'node' ] }

escape转义函数和unescape反转义函数

querystring.escape('<哈哈>')
//执行结果
'%3C%E5%93%88%E5%93%88%3E'

 querystring.unescape('%3C%E5%93%88%E5%93%88%3E')
 //执行结果
'<哈哈>'
HTTP

http流程
http客户端发起请求,创建端口
http服务器在端口监听客户端请求
http服务器向客户端返回状态和内容

在当我们输入网址回车或刷新页面F5的过程中,计算机和浏览器做了很多事情:

首先,域名解析

  1. Chrome浏览器搜索自身的DNS缓存
  2. 查看谷歌浏览器的DNS缓存,在地址栏中输入chrome://net-internals/#dns
  3. 搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经失效)
  4. 读取本地的HOST文件 C:\Windows\System32\drivers\etc\host
  5. 浏览器发起一个DNS的一个系统调用

    1. 宽带运营商服务器查看本地缓存
    2. 运营商服务器发起一个迭代DNS解析的请求
      - 运营商服务器把结果返回操作系统内核同时缓存起来
      - 操作系统内核把结果返回浏览器
      - 最终浏览器拿到网址对应的IP地址

其次,浏览器获得域名对应的ip地址后,发起HTTP“三次握手”。
再次,TCP/IP连接建立后,浏览器就可以向服务器发送http请求。
最后,服务器端接受请求后,经过处理之后,把处理后的一个结果数据返回给浏览器。

HTTP请求 HTTP响应
共同部分,即HTTP头正文信息
HTTP头发送的是一些附加的信息:内容类型,服务器发送响应的日期、HTTP状态码
未完待续····

你可能感兴趣的:(学习笔记)