ホームページ >ウェブフロントエンド >jsチュートリアル >vue2.0 axios クロスドメイン レンダリングの問題の解決策

vue2.0 axios クロスドメイン レンダリングの問題の解決策

亚连
亚连オリジナル
2018-05-31 16:36:201786ブラウズ

ここで、vue2.0 axios クロスドメイン レンダリングの問題の解決策を共有します。これは非常に参考になるので、皆さんのお役に立てれば幸いです。

(Scaffolding vue-cli を使用)

ステップ 1: main.js で次の宣言を使用します

import axios from
'axios';
Vue.prototype.$axios=axios;

その後、他の vue コンポーネントで this.$axios を使用できます

ステップ2: webpack で proxyTable (config の下のindex.js) を設定します

dev:
 { 
加入以下
proxyTable:
{
'/api':
{
target:
'http://api.douban.com',//设置你调用的接口域名和端口号
 别忘了加http 
changeOrigin:
true,
pathRewrite:
 { 
'^/api':
'/'//这里理解成用‘/api'代替target里面的地址,后面组件中我们掉接口时直接用api代替
 
比如我要调用'http://api.douban.com/v2/movie/top250',直接写‘/api/v2/movie/top250'即可
}
}
},

ステップ 3:

試してみます。クロスドメインは成功しますが、注意してください。はい、これは単なるクロスドメインの問題は開発環境 (dev) で解決されます。実際に運用環境のサーバーにデプロイされる場合でも、同じオリジンのサーバー ポートからのものでない場合は、依然としてクロスドメインの問題が発生します。デプロイされているのは 3001 で、フロント エンドとバック エンドの共同デバッグが必要です。第 1 章 ワンステップ フロントエンドの場合は、config/dev.env.js および prod.env.js で個別にテストできます。 、つまり、開発/本番環境では、それぞれリクエストされたアドレス API_HOST を設定します。 開発環境では、上記で設定したプロキシ アドレス API を使用し、本番環境では通常のインターフェイス アドレスを使用しますので、次のように設定します

module.exports = merge(prodEnv, {
 NODE_ENV: '"development"',//开发环境
 API_HOST:"/api/"
})

module.exports = {
 NODE_ENV: '"production"',//生产环境
 API_HOST:'"http://api.douban.com"'
}

もちろん、開発環境でも本番環境でも http://api を直接リクエストできます。構成後、プログラムはテスト中に開発環境か運用環境かを自動的に判断し、API_HOST を自動的に照合します。任意のコンポーネントで process.env.API_HOST を使用して、

instance.post(process.env.API_HOST+'user/login', this.form)

などのアドレスを使用できます。 2 番目のステップの後、エンドサーバーはクロスドメインを設定できます。これは、access-control-allow-origin です。 * は、すべてのアクセスを許可することを意味します。要約すると、開発環境では、フロントエンドがクロスドメインにプロキシを構成できます。実際の運用環境では、バックエンドの協力が必要です。ある専門家は、「この方法は ie9 以下では使いにくいです。互換性が必要な場合は、バックエンドのサーバー ポートにプロキシを追加するのが最善の方法です。その効果は開発中に webpack プロキシと同様です。」

ステップ 4:

<template>
<p>
  <ul>
    <li v-for="item in movieArr">
      <span>{{item.title}}</span>
    </li>
  </ul>
  <button @click="sayOut">渲染</button>
</p>
</template>
<script>
export default {
 data () {
  return {
    movieArr : []
  }
 },
 methods: {
   sayOut () {
     this.$axios.get(&#39;/api/v2/movie/top250&#39;)
    .then((response) => {
       console.log(response.data.subjects)
       this.movieArr = response.data.subjects // 这里要强调一下这个this 箭头函数指的是它的父级也就是vue实例 然后不用箭头函数的话 this是一个undefined 无法.movieArr来给他赋值 这里要注意一下 我被坑了半天 希望小伙伴不要被坑
    })
   }
 }
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>

上記は皆さんのためにまとめたものです。将来皆さんのお役に立てれば幸いです。

関連記事:

layuiのselectのオプションオーバーレイ問題の解決策

Vue.jsカスタムイベントフォーム入力コンポーネントメソッド

Vueにコンポーネントを登録するいくつかの方法のまとめ

以上がvue2.0 axios クロスドメイン レンダリングの問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。