vue(六)网络请求
Axios是一个基于promise的网络请求库,安装npm install --save axios
-
局部引入:组件中引入
import axios from "axios" -
// 在main.js中全局引入 import axios from "axios" // 挂载到全局 const app= createApp(App) app.config.globalProperties.$axios=axios app.mount('#app')
Axios在组件中使用
<script> // 引入querystring库,供post请求使用 import qr from "querystring"; export default { name: 'App', // 在渲染完成后进行网络请求 mounted(){ // get请求 this.$axios.get("http://xxx/xx?id=1") .then(res =>{ console.log(res.data) }) // Post请求,body需要使用querystring转换成字符串,网络请求不传输对象 this.$axios.post("http://xxx/xx", qr.stringify( {"phone":null,"name":null} ) ).then(res =>{ console.log(res.data) }) } } </script>
import axios from "axios" import qr from "querystring" // 创建实例 const instace = axios.create({timeout:500}) // 请求拦截器 instance.interceptors.request.user( config=>{ ..., return config }, error=>{ ..., return xxx } ) // 响应拦截器 instance.interceptors.response.user( response=>{ ... }, error=>{ ... } ) export default instance;
JS采取的就是同源策略,所以会有跨域问题。
目前两种跨域解决方案:
-
后端解决:CROS。添加
header:access-control-allow-origin -
前端解决:proxy。在
vue.config.js
module.exports = defineConfig({ devServer:{ proxy:{ '/api':{ target: '协议+ip+端口', // 会出现跨域的协议+ip+端口 changeOrigin: true } } } })