基本概念
IP地址找到服务器,而域名是比较容易记的,但在用的时候实际也是转换为IP地址。
端口:服务器就好比食堂,端口就好比食堂买菜的堂口,每个端口有自己各自的功能,有的端口是用来下载的,有的端口是用来查询的。
URL:传输协议://服务器/IP:端口//资源所在位置标识
如 http://www.itcast.cn/
每个电脑可以是一个服务器和一个客户端。
本机域名:localhost
IP:127.0.0.1
创建web服务器
然后在浏览器上输入localhost:3000
创建web服务器步骤()
1 引入http模块
2 通过http.createSerever()创建服务器
3 当客户端有请求的时候做出响应。req是请求事件,可以做很多事,如req.url可以查询客户端的地址,req.method可以获得请求的方式,res是响应事件,res.end()就是响应了反映在页面上的内容。
4监听
客户端通过请求报文->服务器端,服务器端通过响应报文->客户端
请求报文:
1请求方式:get 请求 post 发送
2获取请求方式 req.method
3获取地址 req.url
响应报文
响应报文中有很多类型,有一些可能会出现乱码,如
响应大家好,但结果是,而且h2标签直接被显示出来了
解决办法:
添加res的一个方法,writeHeader
res.writeHead(200, {
‘content-type’: 'text/html;charset=utf8 ’
})
第一个参数 200是成功,404是未找到等等,第二个参数代表什么样的类型。如图
问题就被解决了。
如何获得请求参数呢,
当我们输入这个地址后,按道理服务器端是收到了请求,如图
但我们如何获取呢?
用req.url试试,
这样对我们来说并不好利用,所以我们将他转化为对象,此时需要引进一个新模块url,
url的parse方法可以将其转换为对象新形式,如图
,返回的是一个对象,所以可以利用对象名.属性的方法来调用,如图
这样就获取到参数了。
在输入地址的时候,我们可能会访问不同的网页。
如http://localhost:3000/list
http://localhost:3000/html
http://localhost:3000
转到不同的界面,我们需要做出判断,首先得获取是Index还是list等等,在刚才的parse中,发现,
所以我们可以通过xx.pathname来获取,如图
当我们不输入Index或者List等时,也希望他是主界面,所以,
我们就可以通过判断pathname是哪个界面故跳转到哪个界面。
POST请求参数
POST中是通过事件的方式来接受的,有两个事件,data事件是在参数传递时触发,而end则是参数完成时触发。
首先我们创建一个from的html如图
当我们提交账号和密码的时候,服务器端是收得到的,那我们怎么获取呢?这时候要引入一个新模块,querystring,
他的作用跟url相似,将字符串转换成对象。
参数是在每次请求事件触发时传输的。
而且要获得参数只能用data和end.
此时要用到data和end
如图
结果,
字符串成功的装化成对象。所以可以调用了
调用成功。
路由
路由中,获取地址
let pathname=url.parse(req.url,true).pathname;
pathname=pathname==’/’?’/index’:pathname;
效果跟上面介绍url模块差不多。
路由的资源有静态资源,动态资源。
用相同的请求地址访问不同的响应资源。
1 获取请求路径pathname
2 用__dirname获取目录路劲,通过path.join拼接起来
3 读取
中间的public是因为当前文件在public中。
实际上,在我们每次访问一个页面是,如果这个页面有引入其他的文件如css,js这些,他也会将其地址拿过来然后访问。如
访问了第一个结果需要访问下面那些,那次是如果我们的res.writeHead只是用text/html就可能会出错,所以得借助另一个模块,mime,
获取各个文件的类型
接着在 res.writeHead(200, {
‘content-type’:type
}
填上type,如图
这样服务器才可以正常访问其他的css,js文件,也可以正常运行。
一些图片文件因为中文名字问题显示不出来。