发表于: 2019-12-03 17:45:47
1 1216
今天完成的事情
上午目标:理解跨域、HTTP 请求参数之三种格式
跨域:
在前端开发中,“跨域”是绕不过去的,了解跨域之前,先要知道浏览器的同源策略。同源策略:请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同。当你的请求地址和浏览器上的url地址不一样的时候,由于同源策略,将请求不到资源,将无法“跨域”获取资源。我的理解是:跨域这个问题只存在于页面的异步请求之中,比如ajax,vue中的axios等,因为同步请求,直接就在浏览器的地址栏将目标地址打开了,不存在请求地址与浏览器地址不一致的情况。不知道这个对否。但也有特殊情况,比如img标签和script标签的src属性,是可以获取到外部资源,天生可以跨域。解决跨域有很多种办法,最近的项目中使用的办法我认为是最好的一种,即:配置webpack中的proxyTable。
话不多说,请看代码:从前端向后台请求“/a”这个地址的时候,在浏览器看到的url前缀是你本地运行服务"localhost:XXXX",但实际上,你请求的地址是"targer中的目标网页"。如果加上端口,就在axios中添加但是要理解代理中“/a”的意思。
跨域成功,但是这只是开发环境(dev)中解决了跨域问题,生产环境中真正部署到服务器上如果是非同源还是存在跨域问题,如我们部署的服务器端口是3001,需要前后端联调,第一步前端我们可以分生产production和开发development两种环境分别测试,在config/dev.env.js和prod.env.js里也就是开发/生产环境下分别配置一下请求的地址API_HOST,不过这些也是之后理解的了,要有一个感念。
关于 Query String Parameters、Form Data、 Request Payload 三种格式的区别
*1. Query String Parameters 格式: ?key=value&key=value
参数会以 url string 的形式进行传递,即?后的字符串则为其请求参数,并以&作为分隔符。常用在 GET 请求方式时使用。 其他请求方式也可以使用,拼接在接口地址 `url?` 后面。
*2. Form Data 格式:key=value&key=value 键值对形式
当 Content-type 为 application/x-www-form-urlencoded;charset=utf-8 时,参数会以 Form Data 的形式(数据为 String 键值对格式)传递给接口,并且不会显示在接口 url 上。对表单提交和文件上传时做特殊处理,需要使用 new FormData() 方法处理后传递给接口,Content-type 为 multipart/form-data; boundary=----WebKitFormBoundarys9jOoKcA1Kwn9sYS 格式。
*3. Request Payload 格式:{key: value, key: value} (后端经过反序列化得到对象)
当 `Content-type` 为 `application/json;charset=utf-8` 时,参数会以 `Request Payload` 的形式(数据为 json 格式)传递给接口,并且不会显示在接口 url 上。
下午就是列表页发送请求,这个没啥好说的了,登录页面吃了这个很大的亏。
明天计划的事情
继续任务6,加快进度。
遇到的困难
1.为啥登录页请求成功的例子不需要拦截名了。
2.怎么说呢,我现在是有思路,但是遇到困难找不到完全对应的例子参考,就像解数学题,知道需要一个公式,但是没学到那个公式,自己又不能强大到创造出公式。
3.下午弄列表页面,请求接收数据,我按照返回的数据对应的键值的名字换到了自己页面中的键值名。有什么办法自定义键值名,又能获取到参数中对象里的键值同值吗。我是直接让页面中的对象等于传回来的对象。
4.目前卡点需要突破的几个困难:时间戳 date对象、请求回来的数组分页展示出来、状态和类型(012)转换为对应的值。
5.(012)转换为对应的值,自己想的办法是做判断IF,不过感觉有点low,师兄又提议吗
收获
突破一个坑再入许多坑。
评论