Nodejs学习笔记

来源:互联网 发布:家装装修设计软件 编辑:程序博客网 时间:2024/06/05 03:23

模块的流程
创建模块:每个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,仍能正确解析URLUrl {  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状态码
未完待续····

0 0
原创粉丝点击