Vue--记录一下今天学到的跨域问题

本文详细介绍了在Vue2项目中如何通过axios处理跨域问题。首先通过npm安装axios,然后封装axios并设置拦截器。接着,定义了一个测试接口,并在main.js中全局注册axios和api。在vue.config.js中配置代理,解决跨域问题。然而,测试时遇到500错误,原因是content-type不正确,提示需要调整请求或响应的数据类型。

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

Vue2跨域:

要跨域,首先就要去访问服务器,访问接口。

使用  axios

1. 建vue2项目后,安装axios: cnpm install axios --save

2. 为axios封装一下(包括拦截器之类的):

import axios from 'axios';

// 使用create 创建一个axios实力

const service = axios.create({

    baseURL: '/pk',   // 基础url,为vue.config.js中的proxy代理做准备

    timeout: 10000,

    responseType: 'json',  

    params: {},        // 公共参数,给每一个走代理的接口增加参数

    transformRequest: [function(data){

        return data

    }],   

    transformResponse: [function(data){

        return data

    }],   //  transformResponse` 在传递给 then/catch 前,可以对响应数据进行处理

    validateStatus: function(status){

        return status < 400 // 状态码小于400时均为成功(返回true)

    }, 

})


 

//  axios请求拦截器

service.interceptors.request.use(

    config=>{

        return config    // 一定要用return

    },

    err=>{

        return Promise.reject(err)

    }

)

//  axios响应拦截器

service.interceptors.response.use(

    response =>{

        return response  // 一定要用return

    }

)

export default service  //  记得暴露出去

3. axios准备好后,,准备一个测试用的接口:

const api = {

    getData: 'sales-representative/summary-by-sales',

}

export default api

export default api    // 记得暴露出去

4. axios和api都准备好了,为了在项目中更好地使用,所以,进行全局配置一下呗:

在main.js中:

import axios from "./utils/http";

import api from './utils/api';

Vue.prototype.$axios = axios

Vue.prototype.api = api

 (加粗的名字自己取好)

5. 小小测试一下:

在App.vue加入了这个:

mounted(){

    this.$axios.get(this.api.getData).then((res)=>{

        console.log(res);

    })

  }

结果:

 (蓝色框中可见,我的baseUrl已经加进去了,接下来,非常重要的一步,利用vue.config.js配置代理来解决跨域问题)

6. vue.config.js:

module.exports = {

    publicPath: process.env.NODE_ENV === 'development'?'':'',   //  这个东西关系到生产环境与开发环境,暂且不做记录,但在实际开发中,还要看测试环境与开发环境它们使用的接口是否一致,不一致到时还要增加配置。

    devServer:{

        host: '0.0.0.0',

        port: 8081,    //  Vue项目运行的端口

        proxy:{       

            '/pk':{        // 代理(我的理解:baseUrl增加代理名,这里读取代理名,有点像是标志。总的来说就是每个接口先给你加上/pk,然后再在这里读,读取之后,代理起作用,target就是识别到/pk后要访问的服务地址,当然,pathRewrite要将你访问的/pk替换掉,不然,8080不一定能接受到。。。。最后值得一提的是,target使用的是localhost,在实际开发中,不会这么写吧????对的吧,对的吧)

                target: 'http://localhost:8080',

                ws: true,

                changeOrigin: true,

                pathRewrite:{

                    '^/pk': ''

                }

            }

        } 

    }

    

}

7. 最后测:

 当当,500了。。。

为什么会是这个错??

因为,、

content-type不对啊,所以要么修改一下请求,响应数据类型吧?? 

附上content-type对照表:https://tool.oschina.net/commons/   

最后,vue.config.js修改之后,记得重新运行一下,,嗯嗯。暂时没了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被高端技术封印的小柯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值