VUE的爬坑之路(一)--跨域

本文介绍Vue项目中解决跨域问题的方法,包括使用代理及qs插件的方式,并给出后端PHP配合示例。

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

一个简单的增加查询的例子
Vue官网

前提使用脚手架安装的情况

第一种本地使用代理的情况

在confin/index.js   13行
proxyTable: {
      '/api': {
        target: '你自己的接口地址',
        changeOrigin:true,//实行跨域
        pathRewrite: {
          '^/api': ' '
        }
      }
    },

项目的使用 axios本身支持跨域

在src/main.js
import axios from 'axios'
Vue.prototype.$axios = axios

是在你的vue文件内其他请求请看axios的安装和使用教程
var formData = JSON.stringify(this.commons);
console.log(formData)
this.$axios.post('api/commons' ,formData ,{
  headers: {'Content-Type':'application/x-www-form-urlencoded'}
})
  .then(function (response) {
    console.log(response)
      if (response.status === 201){
        alert('感谢您的来稿,你的建议稍后呈现')
        window.location.reload()
      }
  })
  .catch(function (error) {
    console.log(error)
  });
formDate是你要传递的数据。header头一定要添加。其中用到了axios.

axios的安装和使用教程

https://github.com/axios/axios

打包

npm run build

注意:只是本地可以跑,放在线上的话自行百度如何处理(本人目前没有爬出,服务器是Apache的。有搞定的话请分享下)

第二种不使用代理的情况

请先按第一种的方法进行安装和配置
区别

qs的安装

npm install qs

项目中的使用

在src/main.js   
import Qs from 'qs'
Vue.use(Qs)

项目中的文件
 const Qs = require('qs')
 var formData = Qs.stringify(this.commons);
 console.log(formData)
 this.$axios.post('你接口数据地址' ,formData ,{
   headers: {'Content-Type':'application/x-www-form-urlencoded'}
 })
   .then(function (response) {
     console.log(response)
       if (response.status === 201){
         alert('感谢您的来稿,你的建议稍后呈现')
         window.location.reload()
       }
   })
   .catch(function (error) {
     console.log(error)
   });

后端的配合(本人后端是PHP用的yii2框架)

public function behaviors()
{
   return ArrayHelper::merge([
       'contentNegotiator' => [
           'class' => ContentNegotiator::className(),
           'formats' => [
               'text/html' => Response::FORMAT_JSON,
               'application/json' => Response::FORMAT_JSON
           ]
       ],
       [
           'class' => Cors::className(),
           'cors' => [
               'Origin' => ['*'],
               'Access-Control-Allow-Methods' => ['POST', 'GET', 'PUT', 'DELETE', 'OPTIONS'],
               'Access-Control-Allow-Headers' => ['x-request-with,content-type'],
               'Access-Control-Max-Age' => 86400

           ],

       ],
   ],parent::behaviors()); // TODO: Change the autogenerated stub
}

摘要

简明下JSON和qs插件的区别
JSON:{"id":1,"name":tom}
qs id=1&name=tom

第二种方法放到线上
1.打包 npm run build
2.直接配置虚拟主机:域名和指定到你放的项目路径
### 解决 Vue-Vben-Admin-Main 项目的问题 在开发过程中,Vue-Vben-Admin-Main 这样的前端项目可能会遇到请求的问题。为了有效解决这问题,可以采用类似于 `vue-admin` 中的反向代理配置方式[^2]。 #### 配置反向代理 通过修改 `vue.config.js` 文件来设置反向代理是个常见的解决方案。以下是具体的配置方法: ```javascript module.exports = { devServer: { proxy: { '/api': { // 替换为实际使用的前缀路径 target: 'http://your-backend-domain.com', // 后端服务的实际地址 changeOrigin: true, // 是否改变源,默认true即可 pathRewrite: { '^/api': '', // 路径重写规则,去掉/api前缀 }, }, }, }, }; ``` 上述代码的作用是将所有以 `/api` 开头的请求转发到指定的目标服务器上,并移除 URL 的 `/api` 前缀部分。此操作能够帮助开发者绕过浏览器同源策略限制,从而顺利访问后端资源。 #### 关闭 Mock 功能的影响 如果当前项目启用了内置的 Mock 数据模拟功能,则可能会影响真实数据请求的效果。因此,在处理之前还需要确认是否关闭了 Mock 功能。对于基于 `vue-element-admin` 或类似的模板来说,可以通过以下两步完成对 Mock 的禁用[^3]: 1. **注释掉 main.js 中的相关代码** 找到并注释如下内容: ```javascript // if (process.env.NODE_ENV === 'production') { // const { mockXHR } = require('../mock') // mockXHR() // } ``` 2. **注释掉 vue.config.js 中启动 Mock Server 的逻辑** 修改 `vue.config.js` 文件内的相关内容: ```javascript // before: require('./mock/mock-server.js') ``` 以上调整有助于确保生产环境下的 API 请求不会被拦截或替换为本地 Mock 数据。 #### 总结 综合来看,针对 Vue-Vben-Admin-Main 项目中的问题,推荐优先考虑利用 Webpack 提供的 DevServer 反向代理机制进行解决;同时注意检查是否存在启用状态下的 Mock 插件干扰正常的数据交互过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值