模块的流程
创建模块:每个js文件就是一个单独的模块teacher.js
导出模块:exports.add = function(){}
加载模块:var teacher = require(./teacher.js)
使用模块:teacher.add(“nodejs”)
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'
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服务器向客户端返回状态和内容
在当我们输入网址回车或刷新页面F5的过程中,计算机和浏览器做了很多事情:
首先,域名解析
浏览器发起一个DNS的一个系统调用
其次,浏览器获得域名对应的ip地址后,发起HTTP“三次握手”。
再次,TCP/IP连接建立后,浏览器就可以向服务器发送http请求。
最后,服务器端接受请求后,经过处理之后,把处理后的一个结果数据返回给浏览器。
HTTP请求 HTTP响应
共同部分,即HTTP头和正文信息
HTTP头发送的是一些附加的信息:内容类型,服务器发送响应的日期、HTTP状态码
未完待续····