axios+vite配置反向代理踩坑记录

aixos+vite配置反向代理跨域踩坑记录

​ 最近,实习中,一直在写公司的项目。因为公司的项目大多都已经将工程化的东西已经配置好了。导致我昨天自己写项目的时候配置工程化出错!其实,这是一个很简单的问题。之前熟练的时候能够很熟悉地配置,但昨天却配置了很长的时间,因此需要记录一下。🤒🤒🤒

1.在vite中配置反向代理✨

​ 配置反向代理的原因是因为我们在开发的过程中常常会遇到跨域问题,但我们知道,服务器与服务器之间是不存在跨域问题的,在运行vue项目的时候,我们项目和本地服务器是在一个服务器下面,因此不会产生跨域,配置反向代理就是让我们自己的服务器去向目标服务器请求数据,这样就不会产生跨域了。但上线后,如果前后端不是放在一个服务器的话,这个时候我们就要配置我们的Nginx了。

vite.config.js

 server: {
    proxy: {
      '/api': {
        target: 'http://43.142.163.215:3000', // 代理的线上的接口地址
        // 如果要代理 websockets
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '')
        // rewrite: (path) => path.replace(`'/^\\' + VITE_VUE_APP_BASE_API + '/'`, '')
      }
    }

  },

这段代码的意思是凡是向/api开头的接口请求数据,我们都需要代理到服务器再去请求数据,目标服务器是target中所配置的选项。有些时候,我们实际的接口并没有/api,这个时候我们就需要重写。将/api替换掉/,这个时候就用到了rewrite属性。

2.配置aixos😔

这一步也就是昨天踩坑的第一步😔。axios在配置代理服务器后,就需要写目标服务器的地址了,只用写url就行。

错误示范

axios.get('http://43.142.163.215:3000/api').then((res)=>{})

正确示范

axios.get('/api/').then((res)=>{})

但在一般公司,后端都会有统一的开头路径,例如后台就会以/admin开头,前台就会以api开头。如果公司后端没有遵守这样的规范,我们就得手动地重写了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
axios中获取文件上传进度需要使用axios的onUploadProgress方法。在Vue3中,可以使用Composition API来实现。以下是一个使用axios + vue3 + vite获取文件上传进度的示例代码: 引用中的request.ts文件中的代码: ```typescript import axios, { AxiosRequestConfig } from 'axios' const request = axios.create({ baseURL: 'http://localhost:1101', timeout: 5000 }) // 请求拦截器 request.interceptors.request.use(function (config) { // 一般在这里设置token // console.log('config', config) return config }, function (err) { return Promise.reject(err) }) // 响应拦截器 request.interceptors.response.use(function (config) { return config }, function (err) { return Promise.reject(err) }) // 返回数据data export default <T = any>(config: AxiosRequestConfig) => { return request(config).then(res => { return res.data.data as T // 根据你自己的情况 }) } ``` 在Vue3组件中,可以使用Composition API来实现文件上传进度的获取。以下是一个示例代码: ```vue <template> <div> <input type="file" @change="uploadFile" /> <div v-if="progress !== null"> {{ progress }}% </div> </div> </template> <script> import { ref } from 'vue' import uploadFileApi from '@/api/uploadFile' export default { setup() { const progress = ref<number | null>(null) const uploadFile = async (event: Event) => { const file = (event.target as HTMLInputElement).files?.[0] if (!file) { return } const formData = new FormData() formData.append('file', file) await uploadFileApi({ url: '/upload', method: 'post', data: formData, onUploadProgress: (progressEvent) => { progress.value = Math.round((progressEvent.loaded / progressEvent.total) * 100) } }) progress.value = null } return { progress, uploadFile } } } </script> ``` 在上面的代码中,我们使用了ref来定义一个响应式的progress变量,用于显示上传进度。在uploadFile方法中,我们使用FormData来创建一个包含文件的表单数据,并将其作为data参数传递给uploadFileApi方法。在uploadFileApi方法中,我们使用onUploadProgress方法来获取上传进度,并将其赋值给progress变量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值