赞
踩
跨域请求数据,
浏览器
同源策略的保护机制, 通过proxy
实现跨域请求数据; 如果直接postman
请求是不会报错的,vue3
报错是因为经过浏览器了, 数据其实返回了, 但是别浏览器的同源策略屏蔽了。
问题
本地调试, 后端使用**
http://localhost:8081
作为接口地址, 报错[vite] http proxy error
**
可能是localhost
被使用了。 Node.js
在 v17
以下版本中会对DNS
解析地址的结果进行重新排序。 当访问localhost
时, 浏览器使用DNS
来解析地址, 这个地址可能与Vite
正在监听的地址不同。当地址不一致时。导致接口报错。
后端不要使用
localhost
作为接口域名
,配置一个虚拟域名
或者使用127.0.0.1
vite.config.js
中配置代理, 解决跨域问题。
api
的配置vite.config.js
export default defineConfig({
server: { // 中转服务器
proxy: { // 通过代理实现跨域,搭理这个地址http://localhost:8081
'/api': { // 路径, 作为就是替换域名
target: 'http://127.0.0.1:8081', // 表示要替换的服务端地址
changeOrigin: true, // 表示开启代理, 允许跨域请求数据
secure: false, // 如果是https接口,需要配置这个参数
}
}
}
})
释义
: 如果前端请求带有/api
的接口地址, 都会转发到http://127.0.0.1:8081
这个服务端地址上面。
模板中请求示例
<template> <div>{{ store.state.msg }}</div> <p><button @click="updateMsg()">改变数据</button></p> </template> <script> export default{ inject:['store'], /** * fetch 原生js, 不是ajax的封装,是一种http数据请求的方式,es6中的语法 */ mounted(){ /** * fetch 返回promise对象 * * 跨域请求数据, 浏览器同源策略的保护机制, 通过proxy实现跨域请求数据 */ let url = '/api/tests' // 模板中直接写相对路径就可以 fetch(url).then((res)=>{ console.log(res.json()) }) }, methods:{ updateMsg:function(){ this.store.updateMsg() } } } </script>
这样配置, 通用性更高一些。
vite.config.js
export default defineConfig({
server: { // 中转服务器
proxy: { // 通过代理实现跨域,搭理这个地址http://localhost:8081
'/path': { // 路径, 作为就是替换域名
target: 'http://127.0.0.1:8081', // 表示要替换的服务端地址
changeOrigin: true, // 表示开启代理, 允许跨域请求数据
secure: false, // 如果是https接口,需要配置这个参数
rewrite: path => path.replace(/^\/path/, '') // 设置重写路径, 去掉path
}
}
}
})
模板中请求示例
<template> <div>{{ store.state.msg }}</div> <p><button @click="updateMsg()">改变数据</button></p> </template> <script> export default{ inject:['store'], /** * fetch 原生js, 不是ajax的封装,是一种http数据请求的方式,es6中的语法 * * axios 也是http数据请求的方式, 但它是第三方库, 需要引入、安装 */ mounted(){ /** * fetch 返回promise对象 * 特别注意, 接口路径多了一个path, 代理转发的时候, 会去掉的。 */ let url = '/path/api/tests' fetch(url).then((res)=>{ console.log(res.json()) }) }, methods:{ updateMsg:function(){ this.store.updateMsg() } } } </script>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。