美文网首页
axios + vue-cli 解决跨域问题 &&am

axios + vue-cli 解决跨域问题 &&am

作者: 幸宇 | 来源:发表于2018-01-19 15:50 被阅读240次
                  最近自己在学vue的知识,其中遇到数据这一块的问题,总结记录下

跨域解决的方法

使用代理,说到代理就想到es6中的代理proxy,这里说的是接口跨域的 vue proxyTable

我们在使用vue-cli启动项目的时候npm run dev便可以启动我们的项目了,通常我们的请求地址是以localhost:8080来请求接口数据的,localhost是没有办法设置cookie的。

设置代理接口:

config index.js
   // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {    //设置开始
      '/api': {
        target: 'https://api.douban.com/v2',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    },

代理其实是利用的就是 http-proxy-middleware 插件完成的;

入口文件

main.js

下面是自己的配置:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import axios from 'axios'
import VueAxios from 'vue-axios'

Vue.use(VueAxios,axios)
Vue.prototype.$axios = axios; 

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  template: '<App/>',
  components: { App }
})
webpack.dev.conf.js 配置
// 后端代理
const express=require('express')
const axios=require('axios')
const app=express()
var apiRoutes=express.Router()
app.use('/api',apiRoutes)

//引用
  devServer: {
    before(app){
      app.get('/api', (req, res) => {
     
          })
      })
    },
组件中引用数据
  created:function (){

      var url='/api/movie/in_theaters';
       this.$axios.get(url).then((response)=>{
        console.log(response)
        }).catch((e)=>{
         console.log(e)
      })

静态路由数据模拟配置

webpack.dev.conf.js 配置
// 后端代理
const express=require('express')
const axios=require('axios')
const app=express()
var apiRoutes=express.Router()
app.use('/api',apiRoutes)

//引用本地数据文件
var homeData=require('../src/data/homeData.json');
//引用
  devServer: {
    before(app){

      app.get('/api/homeData', (req, res) => {
        
         res.json({   
            errno:0,
            data:homeData  //配置返回函数名字
          })

          })
      })
    },
组件引用
 data(){
    return{
      recommendData:[],
      hotData:[]
    }
  },
  created:function (){

      this.fetchData();

      this.$axios.get('/api/homeData').then((response)=>{
        console.log(response.data)
      })
  },
  methods:{
      fetchData(){
        this.$axios.get('/api/homeData').then((response)=>{
          let data = response.data.data.recommend_feeds;
          let recommend = [];
          let hot = [];
          for(var i in data){
            if(data[i].card && data[i].card.name == '为你推荐'){
              recommend.push(data[i]);
            }else{
              hot.push(data[i]);
            }
          }
          this.recommendData=recommend;
          this.hotData=hot;
        })
      }
  }

相关文章

网友评论

      本文标题:axios + vue-cli 解决跨域问题 &&am

      本文链接:https://www.haomeiwen.com/subject/qkwooxtx.html