URL
统一资源占位符,也就是网址,通过网址确定要访问的这个资源在互联网中的位置。
端口一般不写,默认8080(有些端口号可能不同)
开发过程中客户端和服务端说明:
客户端就是浏览器,服务端就是Node环境
那么怎么通过自己的浏览器访问Node环境这个服务器呢?
每个电脑都有自己的IP地址: 127.0.0.1和域名:localhost,代表此台电脑。
我们通过输入localhost就代表我们要通过网络的方式访问自己电脑的服务器(看上面的URL)
演示:
在HBuilderX的名为asd的项目中创建一个a.html文件夹(这里的端口号是8848)
网页输入localhost:8848/asd/a.html 则可以打开网页
如何创建一个服务器?
1 用http系统模块创建服务器
2 为服务器添加监听事件
3 去监听一个端口(监听事件与监听端口都是通过服务器的事件去处理的)
启动控制台运行这个JS文件
如何访问这个服务器呢?
本机域名+端口就可以访问到这个服务——localhost:3000 (因为上面定义的是3000端口号)
HTTP:
超文本传输协议(html文本),规定了客户端与服务端要如何进行沟通
什么是报文?(就是Headers)
在HTTP请求和响应的过程中传递的数据块就叫报文,包括要传递的数据和一些附加信息,并且要遵守规定好的格式。
如何查看报文?
打开网页按F12
再按F5刷新一下,就可以看到请求报文和响应报文.
请求报文:
1 请求方式:get 请求数据,post 发送数据
通过输入网址的方式打开网页会发送get请求,通过表单提交一般发送post请求。
服务器端是可以拿到请求方式的,我们可以试试让服务器面对不同请求方式时做出不同响应:
(通过req.method拿到请求方式,通过res.end响应不同内容)
补充:端口的作用
接着上面我们在网站上输入一些网址,例如:
localhost:3000/list
localhost:3000/aaaa
发现网页上打印的依然是get,即使没有网页也不会显示错误,不像之前一样,因为这个网址:localhost:3000是我们自己写的服务器,自己的端口号,他又自己的服务,他没有指定规则,以前输入localhost:8848也就是HBuilderX自己定义的服务器,他是定义好请求规则的,输入没有的网址就会报错。
所以,要想进入不同页面,服务器响应不同内容:(通过req.url)
响应报文:
就是HTTP状态码
如何找到?
怎么设置响应头?(通过writeHead方法,第一个参数是状态码,第二个参数是一个对象)
例如上面的例子,规定响应的内容类型是纯文本,那么响应时h2标签不会原封不动的显示,文字并没有变大。我们可以改一下响应类型:
如果内容有文字,就要指定编码类型:
请求参数:
get请求:
如何获取参数?
本来req.url就可以得到url。
服务器想要把url中的参数以对象方式输出需要引入系统模块url。
系统模块url下面有一个parse方法,可以把url地址变成一个对象,对象里面的query对象就是参数
console.log()
可以看到通过这个方法,url变成的对象:
再通过解构赋值把里面的参数和请求地址弄出来。req.url可以获取到url.
post请求:(与get请求不同,post请求的参数是放在报文,也就是Headers中)
看着格式不一样,其实格式与get请求格式是一样的(点击view source可以看到)
服务器如何接收post发送过来的参数呢?
新建一个服务器:
(post请求是通过对请求信息的监听来处理,有data与end事件)
(因为对于post请求,服务器并不是一次性接收,所以采用拼接的方式。)
输出:
一样的,换成对象的方式,通过querystring这个模块的parse方法
对比get请求与post请求:
1 get请求时参数在网页地址栏,post请求时参数在报头(Headers)
2 肯定是get请求时服务器拿参数好拿,就一句代码。post可能是分几次接收就比较麻烦。
路由:(通过req.methond判断是什么请求)
查找静态文件:(获取用户的请求地址转换成服务器中的硬盘地址(绝对路径))
Node.js异步编程
同步API和异步API:(很明显前两个是同步的)
同步API:只有在当前API执行完后才能执行第二个
异步API:当前API的执行不会阻断后续代码的执行
代码执行顺序:
从上到下执行代码,遇到同步API就拿到同步代码执行区执行,遇到异步代码就放到异步代码执行区,等到同步代码执行完成,当异步代码放到了异步代码执行区后,系统回去找异步代码的回调函数,放到回调函数队列,然后把回调函数放到同步代码执行区再执行。
promise解决回调地狱: https://www.bilibili.com/video/BV167411p72d?p=40
再次说一下URL:
通过IP地址找到服务器,但是:
找到服务器后还是不行,因为可能一台服务器上有多种服务,比如邮件服务,文件上传服务,那就要通过端口区别服务。如下图:
最简单