vue解决跨域

本文介绍了如何在使用vue-cli搭建的项目中,配置跨域以便在开发环境中顺利访问接口,并确保上线后无需修改即可直接访问。主要步骤包括在`config/index.js`中设置开发环境的proxyTable,以及通过判断`process.env.NODE_ENV`在生产环境中动态配置axios的baseURL,从而实现开发和生产环境的无缝切换。

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

目的:使用vue-cli搭建的项目在开发时配置跨域,上线后不做任何任何修改,接口也可以访问

1.开发环境设置跨域

  • 使用工具:vue-cli自带的配置
  • 在config > index.js 文件中的proxyTable里边添加’/api’配置
  • 后台接口:http://47.102.123.133:8080/infintyshop
proxyTable: {
        '/api': {
          // 跨域域名
          target: 'http://47.102.123.133:8080/infintyshop',//后台api
          // 是否跨域
          changeOrigin: true,
          pathRewrite: {
            '^/api': ''
          }

在vue组件中使用

 this.$axios.get('/api/queryAll?productId='+this.productId)//相当于
 this.$axios.get('http://47.102.123.133:8080/infintyshop/queryAll?productId='+this.productId) 
  • 需要重新运行项目,不然会报错
  • 重新运行项目后本地开发就不会出现跨域问题了。
  • 当项目打包,放到服务器上,会报错
  • 这样就存在一个问题,你的接口都是/api开头的,打包之后部署到服务器要去除/api,才能正常访问后台接口,如何解决呢?

2.生产环境设置跨域

思路
解决的思路是这样的:

  • 首先,axios的默认实例有一个baseURL的属性,配置了baseURL之后,你访问接口时就会自动带上
  • 假设你vue-cli起了一个开发环境,地址为http://localhost:8080

//例1 当不设置baseURL时
axios.get('/user')  //访问/user相当于访问 http://localhost:8080/user

//例2 
axios.defaults.baseURL='/api'
axios.get('/user')  //访问/user就相当于访问 http://localhost:8080/api/user

然后我们要根据现在的环境是开发环境还是生产环境,配置不同的baseURL

//判断是否是生产环境
var isPro = process.env.NODE_ENV === 'production' //process.env.NODE_ENV用于区分是生产环境还是开发环境
//配置不同的baseURL
module.exports = {
    baseURL: isPro ? 'http://sbsb.com:8888/' : '/api'
}

process.env.NODE_ENV用于区分是生产环境还是开发环境,这个值是webpack设置的

动手操作

  • 假设后台api是http://47.102.123.133:8080/infintyshop
  • 首先在/config目录下新建一个文件,我这里叫api.config.js
    写入以下代码
    //判断是否是生产环境
    var isPro = process.env.NODE_ENV === 'production' //process.env.NODE_ENV用于区分是生产环境还是开发环境
    //根据环境不同导出不同的baseURL
    module.exports = {
        baseURL: isPro ? 'http://47.102.123.133:8080/infintyshop' : '/api'
    }
  • 然后,在main.js中引入axios和api.config.js
//main.js
import Vue from 'vue'
import axios from 'axios'
import apiConfig from '../config/api.config.js'
axios.defaults.baseURL=apiConfig.baseURL
//axios的其他配置...

这样配置之后,打包部署到服务器上也不用再手工去除/apis

在vue组件中使用

this.$axios.get('/queryAll?productId='+this.productId)
this.$axios.get('/api/queryAll?productId='+this.productId)//开发环境相当于这个
this.$axios.get('http://47.102.123.133:8080/infintyshop/queryAll?productId='+this.productId)//生产环境相当于这个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值