クロスドメイン プロキシ ソリューション

なぜクロスドメインなのか

  • 理由:ブラウザーは同一生成元ポリシーによって保護されており、リクエストを正常に送信するにはドメイン名ポート プロトコルが同じである必要があります。

たとえば、次の図

  • ただし、再度呼び出しを実行すると、localhost:9529、localhost:9530……スキャフォールディングサーバーのアドレスが変更されるため、ベースアドレスをlocalhost:9528に直接変更することはできません。
  • したがって、このベースアドレスには書き込むことはできません。

解決策:

ベースアドレスが書かれている場所に移動し、パスを/apiに変更します。これにより、スキャフォールディングサーバーのアドレスがどのように変更されても、「/api」は相対パスであるため、ベースアドレスに接続されます

此时基地址已经做了环境变量处理

/* 这是 封装基地址 */
const _axios = axios.create({
  baseURL: process.env.VUE_APP_URL
})



/* 这是 环境变量中的 写法   记得配置环境变量 .env文件*/
VUE_APP_URL = '/api'
  • ベース アドレスを設定すると、上の図の最初の行が機能するようになります。
  • 次に、リクエストするベース アドレスが localhost:3000 であることをスキャフォールディング サーバーに伝える必要があります。
  • ステップ 1 : vue.config.js ファイルで devServer を見つけて、その中にプロキシ (プロキシ) を書き込みます。次に、/api を処理する必要があります。それが /api である限り、私たちは api として動作し始めます。プロキシですが、必ずしも /api である必要はありません。状況を自分で処理してください
devServer  在他里面写上 代理(proxy


devServer: {
    // 开发环境服务器配制
    port: 1234, // 端口号
    open: true, // 自动打开浏览器
    overlay: {
      warnings: false,
      errors: true
    },
  /* proxy是代理 */
    proxy: {
    /* 你的基地址后面不一定是 /api 所以看情况写 */
    '/api':{  
    target: 'localhost:3000/api'   //原本的基地址是 localhost:3000/api 
    /* 内部规则:用target+/api(代理的值) 作用最终基地址 */
    pathrewrite:{  /* 这个方法是 不让他拼接 不让上面的内部规则执行 所以最终的基地址就是 http://localhost:3000/api */
      '^/api': ''  //这里的意思就是 将/api改为空  就可以去掉一个/api了  
    }
  }
    }
    // before: require('./mock/mock-server.js')
  },
  • このとき、上の全体図の 2 行目も通過しますが、このとき 3 行目と 4 行目はクロスドメイン問題を解決するために自動的に戻ります。

構成を変更した後にスキャフォールディングを再起動するための温かいリマインダー

高度なクロスドメイン プロキシ ソリューション

  • 上記の前提条件は、インターフェースが正常に呼び出せるときに「/api」を書き換えずにprocess.env.VUE_APP_URLに書き込む方法です? そして、k 名前付き変数の値をオブジェクトに追加する方法
错误写法!!!!!

devServer: {
    // 开发环境服务器配制
    port: 1234, // 端口号
    open: true, // 自动打开浏览器
    overlay: {
      warnings: false,
      errors: true
    },
  /* proxy是代理 */
    proxy:{
  'process.env.VUE_APP_URL':{     如果是这样的话  是不可以的 因为他属于字符串了  这样写是错误的❌
    target: 'localhost:3000/api'   
    pathrewrite:{
      '^/api': ''  //这里的意思就是 将/api改为空  就可以去掉一个/api了  
    }
  }
}
    // before: require('./mock/mock-server.js')
  },
正确写法!!!!

一个对象内  想要加入一个 变量的值
  第一种写法:---> obj:{}中  想要加入 let a = 1--->  obj[a] = 1 --->  打印obj--->{ a:1 }
  第二种写法:--->obj2:{} 中加入 let a2 = 2---> obj2= { [a2]:2 }

devServer: {
    // 开发环境服务器配制
    port: 1234, // 端口号
    open: true, // 自动打开浏览器
    overlay: {
      warnings: false,
      errors: true
    },
  /* proxy是代理 */
    proxy:{
  [process.env.VUE_APP_URL]:{     
    target: process.env.VUE_APP_TARGET    //这里也可以用变量 去到对应的环境变量中设置一个新的基地址比如 VUE_APP_TARGET = 'localhost:3000/api'
    pathrewrite:{
      ['^'+ process.env.VUE_APP_URL]: ''  //这里的意思就是 将/api改为空  就可以去掉一个/api了  
    }
  }
}
  },
  • 高度なライティングの利点は何ですか? 利点は、将来、対応する .env ファイル内で直接変更できることです。あちこち変更する必要はありません。
可写 可 不写   简化代码的作用


如果下面 不写  pathrewrite 这个对象  我们需要做些什么??
 proxy:{
  [process.env.VUE_APP_URL]:{     
    target: process.env.VUE_APP_TARGET    //这里也可以用变量 去到对应的环境变量中设置一个新的基地址比如 VUE_APP_TARGET = 'localhost:3000/api'
  }
}

首先 搞清楚 target的内部规则是 将代理的值和 target做拼接 也就是  
  target: process.env.VUE_APP_TARGET 拼接 [process.env.VUE_APP_URL]
所以我们要做的是
  一: 去.env文件中  将基地址改为 你代理的值 例如---> VUE_APP_URL = '/api'--这样就可以直接拼接上去了
  二: 在.env文件中  将新设置的基地址 VUE_APP_TARGET = 'http://localhost:3000' 去掉/api
       这样就可以 最后只加一个 代理值了

おすすめ

転載: blog.csdn.net/weixin_57127914/article/details/130110440