vue中解决跨域的常见方案分享(建议收藏)

 更新时间:2025年11月12日 09:59:56   作者:小二爱编程·  
本文主要介绍了前后端分离项目中的跨域问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、开发环境解决跨域方法

平时使用vue开发的时候,大多会使用vue-cli搭建项目,在vue-cli搭建的项目中有一个配置文件vue.config.js,可以在该文件中进行相应的配置解决开发环境的跨域问题。

第一步设置公共url : api/index.js

import axios from 'axios'
import router from '@/router/index.js'
import store from '@/store/index.js'
// 创建一个axios实例
var instance = axios.create({ 

baseURL: "/api",
})
// 请求拦截器
instance.interceptors.request.use(function (config) { 

config.headers['E_Token'] = store.state.user.E_Token;
return config;
}, function (error) { 

// 对请求错误做些什么
return Promise.reject(error);
})
// 响应拦截
instance.interceptors.response.use(function (config) { 

if(config.data.retCode !=0){ 

// 处理后台异常
return false;
}
return config;
}, function (error) { 

return Promise.reject(error)
})
export default function (method, url, data = null) { 

method = method.toLowerCase();
if (method == 'post') { 

return instance.post(url, data)
} else if (method == 'get') { 

return instance.get(url, data)
} else if (method == 'delete') { 

return instance.delete(url, data)
} else if (method == 'put') { 

return instance.put(url, data)
} else { 

console.error('未知的method' + method)
return false
}
}

api/modules/pagesApi.js

import req from '../index'
//用户注册接口
export const register =(params)=>{ 

return req("post", '/user/register', params)
}
//用户登录接口
export const login =(params)=>{ 

return req("post", '/user/login', params)
}
//Model列表及分页
export const getFormList =(params)=>{ 

return req("post", '/model/getFormList', params)
}
//查看详情
export const queryModel =(params)=>{ 

return req("get", '/model/queryModel/'+params.id,{ 
})
}
//Model删除接口
export const deleteModel =(params)=>{ 

return req("delete", '/model/deleteModel/'+params.id,{ 
})
}
//Model新增
export const insertModel =(params)=>{ 

return req("post", '/model/insertModel', params)
}

通过拦截器我们可以更加容易的与后台进行交互,同时简洁了代码,使得管理更加容易,我们创建拦截器的时候可以指定baseUrl,这里我指定的是**”/api”,因为接下来我们需要对“/api”进行拦截配置,目的是凡是以“/api”开头的请求url都会将url中的“/api”**的前面添加上我们指定的内容。 例如:

'/api/user/login'     替换成   'http://119.20.224.137:8201/api/user/login'

vue.config.js

devServer: {
// 1.指定服务的ip
host: "192.168.0.128",
// 2.指定服务的端口
port: 3000,
open: true,
overlay: {
warnings: false,
errors: true
},
// 3.开发环境进行http的代理
proxy: {
// 匹配 url 路径的开头
'/api': {
// 1.路劲只要是/api开头的url都代理到下面这个网站。
// 例如:'/api/xxxx' 会代理到 https://119.20.224.137/api/xxxx
target: 'http://119.20.224.137:8201',
changeOrigin: true,
pathRewrite: { '^/api': '/api/' }
}
}
},

二、生产环境解决跨域方法

配置nginx代理

使用nginx反向代理,在配置文件nginx.conf中找到server{}对象,更改项目地址root和配置代理地址proxy_pass,这个方法适合前端静态文件使用:

location / { 

root   D:/browseClient/dist;  #自己的前端项目地址
index  index.html index.htm;
}
#解决跨域
location /api { 
                                # 自定义nginx接口前缀
proxy_pass   http://127.0.0.1:3000;            # 后台api接口地址
proxy_redirect default;      
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
}

三、后端处理

 response.setHeader("Access-Control-Allow-Origin", "*");//* or origin as u prefer
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "PUT, POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "content-type, authorization");

到此这篇关于vue中解决跨域的常见方案分享(建议收藏)的文章就介绍到这了,更多相关vue跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中阻止click事件冒泡,防止触发另一个事件的方法

    vue中阻止click事件冒泡,防止触发另一个事件的方法

    下面小编就为大家分享一篇vue中阻止click事件冒泡,防止触发另一个事件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)

    Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)

    在elementui Input输入框中可以找到远程搜索组件,获取服务端的数据。这篇文章主要给大家介绍Vue el-autocomplete远程搜索下拉框并实现自动填充功能,感兴趣的朋友一起看看吧
    2019-10-10
  • vue使用i18n实现国际化的方法详解

    vue使用i18n实现国际化的方法详解

    这篇文章主要给大家介绍了关于vue使用i18n如何实现国际化的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • elementUI中el-table表头和内容全部一行显示完整的方法

    elementUI中el-table表头和内容全部一行显示完整的方法

    最近参与web开发时,让我解决一个elementui控制内容单行显示,下面这篇文章主要给大家介绍了关于elementUI中el-table表头和内容全部一行显示完整的方法,需要的朋友可以参考下
    2023-06-06
  • Vue Mint UI mt-swipe的使用方式

    Vue Mint UI mt-swipe的使用方式

    这篇文章主要介绍了Vue Mint UI mt-swipe的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 在vue-cli项目中如何使用swiper

    在vue-cli项目中如何使用swiper

    这篇文章主要介绍了在vue-cli项目中如何使用swiper问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Vue按需加载的具体实现

    Vue按需加载的具体实现

    本篇文章主要介绍了Vue按需加载的具体实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Vue跑马灯marquee组件使用方法详解

    Vue跑马灯marquee组件使用方法详解

    这篇文章主要为大家详细介绍了Vue跑马灯marquee组件的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果

    Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果

    这篇文章主要介绍了Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果,通过实例代码相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • vue+elementUi中的table实现跨页多选功能(示例详解)

    vue+elementUi中的table实现跨页多选功能(示例详解)

    最近在开发工业品超市的后台系统,遇到一个需求,就是实现在一个table表格中多选数据,在网上查了好多,有些方法真的是无语,下面通过本文给大家分享vue+elementUi中的table实现跨页多选功能,感兴趣的朋友跟随小编一起看看吧
    2024-05-05

最新评论