Vue 配置反向代理以及axios二次封装

本文介绍了如何在Vue项目中配置反向代理以解决跨域问题,详细步骤包括创建vue.config.js文件进行代理配置,下载并引入axios,以及在src/api目录下封装axios请求。同时,讲解了在.vue文件中如何引入和使用封装后的axios,并讨论了async函数的异步特性及其在异步操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在当前根目录下打开终端 

    下载axios :

  npm install axios  -S

然后再mian.js里面引入

import axios from 'axios'
Vue.prototype.axios = axios

2.在项目文件根目录新建一个vue.config.js文件   配置反向代理 解决跨域的问题

module.exports = {
  devServer: {
    proxy: {
      "/api": {
        target: 'http://www.ibugthree.com/', // 想要访问接口域名
        changeOrigin: true, // 开启跨域,在本地创建一个虚拟服务,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据交互就不会有问题
        pathRewrite: {
          "^/api": '', // 利用这个地面的值拼接上target里面的地址
        }
      }
    }
  },
}

3.在src文件夹下新建api

3.1api里新建request.js文件夹  里面写入:

// 这是axios二次封装
import axios from 'axios'
//import store f
### Vue 3封装 Axios配置代理 #### 封装 Axios 实例 为了更好地管理维护 HTTP 请求,通常会创建一个独立的模块用于初始化配置 Axios 实例。下面是一个简单的 `axios.js` 文件实现: ```javascript // src/utils/axios.js import axios from 'axios'; const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // API 的 base_url timeout: 5000 // 请求超时时间 }); // 请求拦截器 service.interceptors.request.use( config => { // 在发送请求之前做些什么 return config; }, error => { // 对请求错误做些什么 return Promise.reject(error); } ); // 响应拦截器 service.interceptors.response.use( response => { const res = response.data; // 如果返回的状态码不是2xx,则认为是有错的 if (res.code !== 200) { Message({ message: res.message || 'Error', type: 'error' }); return Promise.reject(new Error(res.message || 'Error')); } else { return res; } }, error => { console.log('err' + error); // for debug Message({ message: error.message, type: 'error' }); return Promise.reject(error); } ); export default service; ``` 此部分代码展示了如何设置基础 URL 默认超时,并定义了两个重要的中间件——请求前处理逻辑与响应后的数据解析[^2]。 #### 注册全局 `$http` 方法 为了让整个应用都能方便地访问这个自定义的 Axios 客户端实例,可以在应用程序启动时将其注册为全局属性。这可以通过修改项目的入口文件完成,如下所示: ```typescript // main.ts import { createApp } from 'vue'; import App from './App.vue'; import store from './store'; import router from './router'; import Vant from 'vant'; import 'vant/lib/index.css'; import axios from './utils/axios'; const app = createApp(App); app.config.globalProperties.$http = axios; app.use(store) .use(router) .use(Vant) .mount('#app'); ``` 这段脚本说明了怎样把刚才建立的服务作为名为 `$http` 的全局函数暴露给所有的组件使用。 #### 创建服务层接口 接下来可以基于上面提到的基础客户端构建具体业务场景下的 API 接口调用方法。这里给出一个例子展示如何定义登录功能对应的远程过程调用(RPC): ```typescript // src/apis/user.ts import service from '@/utils/axios'; interface ILoginData {} export function login(data: ILoginData): any { return service({ url: '/login', // 这里应该是实际服务器提供的路径 method: 'post', data }) } ``` 此处介绍了如何利用先前准备好的 Axios 工具类去执行特定类型的HTTP操作,比如 POST 登录验证请求[^4]。 #### 配置开发环境中的代理 当处于本地调试阶段时,可能会遇到跨域资源共享(CORS)的问题。为了避免这种情况发生,推荐采用 Webpack DevServer 提供的功能来进行反向代理设置。编辑 `vite.config.ts` 或者 `.env.development.local` 来指定转发规则: 对于Vite项目,在 vite.config.ts 添加 proxy 设置: ```ts // vite.config.ts import { defineConfig } from 'vite' export default defineConfig({ server: { proxy: { '^/api': { target: 'https://example.com/api/', changeOrigin: true, rewrite: path => path.replace(/^\/api/, ''), }, }, }, }) ``` 如果是Webpack项目则在 webpack.dev.conf.js 修改 devServer.proxy 属性: ```js module.exports = { // ... devServer: { host: 'localhost', port: 8080, open: true, hotOnly: false, overlay: { warnings: false, errors: true }, proxy: { '/api': { target: 'http://jsonplaceholder.typicode.com/', // 替换成目标API地址 ws: true, changeOrigin: true, secure: false, pathRewrite: {'^/api' : ''} } } } }; ``` 以上内容解释了如果要解决前后端分离架构下常见的 CORS 错误应该如何调整开发工具链的相关选项[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值