解决Vue Axios跨域问题(预检请求)
一、问题描述
在前后端分离开发中,前端通过Vue框架发起Ajax请求时,如果请求的URL与前端所在的域名不一致,就会触发浏览器的跨域机制。其中一种常见的跨域问题是"Request Method: OPTIONS",也称为预检请求。在本文中,我们将说明如何解决这个问题。
二、解决流程
为了解决Vue Axios跨域问题,我们需要采取一系列的步骤。下面是解决该问题的具体流程:
步骤 | 描述 |
---|---|
第一步 | 安装并配置Axios |
第二步 | 在Vue项目中引入Axios |
第三步 | 配置代理服务器 |
第四步 | 配置跨域解决方案 |
下面我们将详细介绍每一步应该做什么,以及提供相应的代码示例。
三、具体步骤及代码示例
第一步:安装并配置Axios
首先,在Vue项目中安装Axios。打开终端,进入Vue项目的根目录,执行以下命令安装Axios:
npm install axios --save
安装完成后,在src目录中新建一个util目录,并在util目录下创建一个api.js文件,用于定义接口请求相关的方法。
// api.js文件
import axios from 'axios'
// 创建axios实例
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // 根据实际情况配置baseURL
timeout: 5000 // 请求超时时间
})
// 请求拦截器
service.interceptors.request.use(
config => {
// 在请求发送之前做一些处理,如添加token等
// ...
return config
},
error => {
// 请求错误处理
// ...
return Promise.reject(error)
}
)
// 响应拦截器
service.interceptors.response.use(
response => {
// 在接收响应做一些处理,如判断响应状态码等
// ...
return response.data
},
error => {
// 响应错误处理
// ...
return Promise.reject(error)
}
)
export default service
第二步:在Vue项目中引入Axios
在main.js中引入Axios,并挂载到Vue原型上,以便在组件中使用。
// main.js文件
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from './util/api'
Vue.prototype.$axios = axios
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
第三步:配置代理服务器
为了解决跨域问题,我们需要在Vue项目中配置一个代理服务器。在Vue项目的根目录下创建vue.config.js文件,并添加以下配置:
// vue.config.js文件
module.exports = {
devServer: {
proxy: {
'/api': {
target: 'http://localhost:8080', // 代理目标地址
changeOrigin: true, // 是否跨域
pathRewrite: {
'^/api': '' // 重写路径,去掉/api前缀
}
}
}
}
}
第四步:配置跨域解决方案
最后,我们需要在后端服务器中进行相关配置。不同的后端服务器有不同的解决方案,以下是一些常见的解决方案。
1. Nginx配置
如果使用Nginx作为后端服务器,可以在Nginx的配置文件中进行跨域配置。打开Nginx的配置文件(一般位于/etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf),在http模块中添加以下配置:
location /api/ {
proxy_pass http://localhost:8080/;
}
2. Spring Boot配置
如果使用Spring Boot作为后端服务器,可以在后端的配置文件中添加以下配置:
@Configuration
public class CorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(Cors
标签:Axios,跨域,api,配置,Request,Vue,axios
From: https://blog.51cto.com/u_16175475/6738629