互联网技术 · 2024年2月10日

Vue跨域问题的解决方法

这篇文章主要介绍了vue跨域的解决方法,帮助大家解决前端跨域问题

好久不见,今天想写的是前段时间碰到的一个小问题。其实故事背景是前端的同学跟我说他们前端请求不了我后端的数据,说是跨域了。

其实跨域的问题,在如今前后端的时代非常常见,如果图方便的话,一般是在后端的请求以及*中设置header,但是有一些业务需求单纯后端是解决不了的。还是需要前端自行来处理,这次碰到的就是前端需要自行处理的情况。

这里我不细说跨域的解决方案,只聊聊我是怎么解决的。

vue跨域代理解决方案

记一次vue跨域的解决

其实需求比较简单,就是先post模拟登陆到B服务器,然后get请求B服务器上指定接口的数据,返回给A服务器。

当然这里的A服务器目前是处于我本机电脑。

首先,我们需要在根目录下配置vue.config.js,这个文件不是每个项目都有的,如果没有的可以自行配置。

这个文件里面具体配置有什么,这里给大家官网的地址:

https://cli.vuejs.org/zh/config

官网中详细介绍了每一个参数的配置,当然我们需要什么就可以拿什么参数来配置。这里我从网上找了一份比较全面的vue.config.js,大家直接复制粘贴即可

// vue.config.js 配置说明https://cli.vuejs.org/zh/config/#css-loaderoptions

//官方vue.config.js 参考文档

// 这里只列一部分,具体配置参考文档

module.exports = {

// 部署生产环境和开发环境下的URL。

// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上

//例如 https://www.my-app.com/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。

//baseUrl 从 Vue CLI 3.3 起已弃用,请使用publicPath

publicPath: process.env.NODE_ENV === “production” ? “./” : “/”,

// outputDir: 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)

outputDir: “mycli3”,

//用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)

assetsDir: “assets”,

//指定生成的 index.html 的输出路径 (打包之后,改变系统默认的index.html的文件名)

// indexPath: “myIndex.html”,

//默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存。你可以通过将这个选项设为 false 来关闭文件名哈希。(false的时候就是让原来的文件名不改变)

filenameHashing: false,

// lintOnSave:{ type:Boolean default:true } 问你是否使用eslint

lintOnSave: true,

//如果你想要在生产构建时禁用 eslint-loader,你可以用如下配置

// lintOnSave: process.env.NODE_ENV !== production,

//是否使用包含运行时编译器的 Vue 构建版本。设置为 true 后你就可以在 Vue 组件中使用 template 选项了,但是这会让你的应用额外增加 10kb 左右。(默认false)

// runtimeCompiler: false,

/**

* 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。

* 打包之后发现map文件过大,项目文件体积很大,设置为false就可以不输出map文件

* map文件的作用在于:项目打包后,代码都是经过压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错。

* 有了map就可以像未加密的代码一样,准确的输出是哪一行哪一列有错。

* */

productionSourceMap: false,

// 它支持webPack-dev-server的所有选项

devServer: {

host: “localhost”,

port: 8081, // 端口号

https: false, // https:{type:Boolean}

open: true, //配置自动启动浏览器

// 配置多个代理

proxy: {

“/apis”: {

target: “http://xxx.xx.xx.xx:xxxxx”,// 要访问的接口域名

ws: true,// 是否启用websockets

changeOrigin: true, //开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题

pathRewrite: {

^/apis: //这里理解成用/api代替target里面的地址,比如我要调用http://40.00.100.100:3002/user/add,直接写/api/user/add即可

}

}

}

};

这篇文章对于跨域写得并不是很全面,但是对于这方面有困惑的同学,我相信看了之后会茅塞顿开。跨域问题的思考思路无非就是前端和后端两方面。分别简单测试一下就能够锁定问题出在哪方面。如果你觉得这篇文章对你现在或者以后有用,请支持一下!

以上就是记一次vue跨域的解决的详细内容

来源:脚本之家

链接:https://www.jb51.net/article/197918.htm

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册