zoukankan      html  css  js  c++  java
  • vue-axios跨域配置

    一、vue安装axios:

    简介:

    vue2.0之后,就不再对vue-resource更新,而是推荐使用axios。基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 Node.js 中使用。

    功能特性
    1、在浏览器中发送 XMLHttpRequests 请求
    2、在 node.js 中发送 http请求
    3、支持 Promise API
    4、拦截请求和响应
    5、转换请求和响应数据
    6、取消请求
    7、自动转换 JSON 数据
    8、客户端支持保护安全免受 CSRF/XSRF 攻击

    首先需要安装axios:

    $ npm install axios

    在main.js文件里面引入使用:

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

    二、vue中axios的跨域使用:

    1.什么是跨域?

    跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。

    例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。

    同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;

    在vue中使用本地代理的方式进行跨域或者使用jquery:

    1.首先在main.js中,配置下我们访问的Url前缀:

    import Vue from 'vue'
    import App from './App'
    import router from './router'
    import axios from 'axios'
    Vue.prototype.$axios = axios
    axios.defaults.baseURL = '/api'
    axios.defaults.headers.post['Content-Type'] = 'application/json';
    Vue.config.productionTip = false
    
    /* eslint-disable no-new */
    new Vue({
        el: '#app',
        router,
        components: {
            App
        },
        template: '<App/>'
    })

    关键代码是:Axios.defaults.baseURL = '/api',这样每次发送请求都会带一个/api的前缀。

    2.配置代理修改config文件夹下的index.js文件,在proxyTable中加上如下代码:

    '/api':{
        target: "https://www.wd.com/dev",
        changeOrigin:true,
        pathRewrite:{
            '^/api':''
        }
    }

    3.修改url请求:

     this.$axios
         .get("/unit/queryTree")
         .then(res => {
            console.log(res.data);
         })
         .catch(err => {
            console.log(err);
     });

    4.重启服务就ok

    原理:

    因为我们给url加上了前缀 /api,我们访问https://www.wd.com/dev/unit/queryTree就当于访问了:https://www.wd.com/api/dev/unit/queryTree。(假设本地访问端口号为 18936)

    又因为在 index.js 中的 proxyTable 中拦截了 /api ,并把 /api 及其前面的所有替换成了 target 中的内容,因此实际访问 Url 是https://www.wd.com/dev/unit/queryTree。

    三、Vue3 版本

    1.升级到 Vue3 后,会发现 Vue2 中存放配置的 config 文件夹没有了,大家不要慌张。可以在 package.json 文件的同级目录下创建 vue.config.js 文件。给出该文件的基础配置:

    module.exports = {
        outputDir: 'dist',   //build输出目录
        assetsDir: 'assets', //静态资源目录(js, css, img)
        lintOnSave: false, //是否开启eslint
        devServer: {
            open: true, //是否自动弹出浏览器页面
            host: "localhost", 
            port: '8080', 
            https: false,   //是否使用https协议
            hotOnly: false, //是否开启热更新
            proxy: null,
        }
    }

    Vue3 解决跨域,内容只有第二步配置代理 和 Vue2 不同,其他的一样。

    2.修改 vue.config.js 中 devServer 子节点内容,添加一个 proxy

    devServer: {
        open: true, //是否自动弹出浏览器页面
        host: "localhost", 
        port: '8080',
        https: false,
        hotOnly: false, 
        proxy: {
            '/api': {
                target: 'https://www.v2ex.com/api', //API服务器的地址
                changeOrigin: true,
                pathRewrite: {
                    '^/api': ''
                }
            }
        },
    }
  • 相关阅读:
    51Nod 1006 最长公共子序列Lcs
    输入和输出
    51Nod 1092 回文字符串
    51Nod 1050 循环数组最大子段和
    项目初始
    一元多项式求导 (25)
    说反话 (20)
    数组元素循环右移问题 (20)
    素数对猜想 (20)
    换个格式输出整数 (15)
  • 原文地址:https://www.cnblogs.com/1542986913Yu/p/11537874.html
Copyright © 2011-2022 走看看