> 文章列表 > JS-api(三)

JS-api(三)

JS-api(三)

目录:

(1)api-fetch-跨域-请求响应头解决

(2)api-fetch-跨域-代理解决

(3)api-导入导出


(1)api-fetch-跨域-请求响应头解决

同步和异步前面我们演示的是从json文件中获取的数据,不是从后端获取的数据,不是从tomcat后端访问的数据,如果直接从后端获取数据会报错

 

 

修改同步获取数据:从后端获取数据 

 

出现了错误,这是产生了跨域问题: 

 

 浏览器对fetch的响应做一个检查,叫做同源检查,发起请求的资源来源是谁,fetch返回的响应是谁,是不是同一个服务器的,只有是同源的,数据才可用

当访问后端的数据时,由于访问的数据不一致,网页来源于前端服务器Express   7070,而数据来源于后端  8080 不同源,因此fetch就不会通过浏览器的检查,而报错

解决:当发送者跟访问的资源不同的情况下,会在请求中带一个特殊的头,叫做Origin头,发送者的源是谁,Student.html发送请求会带Origin头告诉发送的来源7070,告诉tomcat是7070的,想要8080的数据,那么就会交给tomcat来决定允许访问tomcat的资源 ,也会加一个头响应  * 代表所有可以使用

 

 

F12:网络可以

请求头里: 看到有一个Oringin头 

 

响应头没有做处理:所以会报错:

 

 在后端可以进行处理:加一个注解指定7070的可以跨域

 

 刷新再访问:请求头

 响应头:多了Access-Control-Allow-Origin

 后端返回的是一个对象:{code:200,data:[   ]}

 前端需要该一下:

成功获取数据: 

(2)api-fetch-跨域-代理解决

 

 访问后端的请求写成7070...,发送给前端服务器代理,由代理间接的去后端8080...访问,所以来源都是7070,是同源的没有发生跨域

它是怎么区分到底走7070还是8080,它是通过浏览器的前缀路径来区分,比如说加了一个api,加了之后就走代理 ,代理发的请求是通过javaScript发送的请求,不存在同源和跨域

 

 首先安装代理插件:

在main.js:引入使用代理:

 

在重启:前端服务器:显示代理已经创建

 

 

前端页面改一下端口:

访问自己同源的前面的也可以省略掉: 

 

后端代码跨域访问注解注释掉啦:

 

 

可以看到访问的是7070 ,通过代理到8080找到数据返回

 

 

(3)api-导入导出

当javaScript项目变大后需要把javaScript代码拆分成js文件,js文件可以称为js的模块,模块与模块之间的相互引用的话,需要使用导入和导出的语法啦,

 

 当个导出,引入的时候名字要对应

 

 

  使用了默认导入后,在引入的时候使用一个x变量,不用加大括号就可以引入了

 整体导入:

 

在较早的时候使用的是script src是老的方式 ,使用import是较新的语法,可以用在js内部引入在一个js引用另外一个js,以后接触的js框架都是使用import语法的 需要加type=module ,也必须遵循同源策略,老的引入可以不同源

 

 

强力磁铁厂