1.vue3+vite开发中axios使用及跨域问题解决

一、跨域问题解决

 1.基于vite+vue3配置时,在vite.congig.js文件server项目中添加 proxy代理

  文件名:vite.congig.js

  server: {
    open: true,//启动项目自动弹出浏览器
    port: '3000',
    proxy: {
      '/api': {
        target: 'http://localhost:8000/api/',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '') // 不可以省略rewrite
      }
    }
2.axios封装时设置基本路径baseURL
  const instance = axios.create({
  baseURL:  '/api', // api的base_url import.meta.env.VUE_APP_BASE_API 也可以直接写
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  }
}
);

二、provide/inject 实现axios 全区使用

  在main.js中provide

   app.provide('axios', axios)

  在组件内获取

  import { inject } from 'vue'

  const axios = inject('axios')

  axios.post()

具体代码如下:

1.axios封装http.js
import axios,{AxiosRequestConfig,AxiosResponse} from 'axios'
import { ElLoading } from 'element-plus';

let loading:any;
const startLoading = ()=>{
  interface Options {
    lock: boolean;
    text: string;
    background: string;
  };
  const options:Options = {
    lock: true,
    text: "加载中...",
    background: "rgba(0,0,0,0.7)"
  }
  loading = ElLoading.service(options)
}
const endLoading = ()=>{
  loading.close()
}
const instance = axios.create({
  baseURL:  '/api', // api的base_url import.meta.env.VUE_APP_BASE_API 也可以直接写
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  }
}
);
// 请求拦截
instance.interceptors.request.use((config:AxiosRequestConfig) =>{
  startLoading(); //  开始loading
  return config
})
// 响应拦截
instance.interceptors.response.use((response:AxiosResponse) =>{
  endLoading(); //  结束loading
  return response;
},error =>{
  return Promise.reject(error)  // 错误提醒
})

export default axios
2.全区应用main.js
// 加载 axios
import axios from './http'
const app = createApp(App)
// 全局挂载axios
app.provide('axios', axios)
3.组件中使用
 import { inject } from 'vue'

  const axios = inject('axios')

  // @ts-ignore
 axios.post('/api/users/register', props.registerUser)

Vite + Vue3 中处理axios问题,通常不需要后端配置,因为Vite提供了一个内置的开发服务器,可以自动处理本地开发环境下的CORS问题。以下是一种常见的解决方案: 1. **Vue.config.js 配置**: - 在`src`目录下创建或打开`vue.config.js`文件,这是一个全局的配置文件。 ```javascript import axios from &#39;axios&#39;; module.exports = { devServer: { proxy: [ // 使用代理规则,将所有匹配 &#39;/api&#39; 的请求转发到 &#39;http://localhost:8080&#39; (假设你的后端服务运行在这里) { target: &#39;http://localhost:8080&#39;, changeOrigin: true, pathRewrite: { &#39;^/api&#39;: &#39;&#39; }, // 将&#39;/api&#39;前缀替换为空字符串 }, ], }, configureWebpack: config => { if (process.env.NODE_ENV === &#39;production&#39;) { // 生产环境不启用代理,生产构建会直接发送请求到服务器 delete config.devServer.proxy; } }, axios: axios, // 注册axios实例,确保它会被应用到组件中 }; ``` 2. **在组件中使用axios**: 现在可以在Vue组件内部正常使用`this.$axios`,它已经配置好了。 ```javascript <template> <div> <button @click="fetchData">获取数据</button> </div> </template> <script> import axios from &#39;axios&#39;; export default { methods: { fetchData() { this.$axios.get(&#39;/api/data&#39;).then(response => { console.log(response.data); }).catch(error => { console.error(&#39;Error fetching data:&#39;, error); }); }, }, }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值