美文网首页vueaxios
vue-cli 引入axios即跨域使用

vue-cli 引入axios即跨域使用

作者: 我就是心虚 | 来源:发表于2017-10-05 17:04 被阅读0次

    使用 cnpm 安装 axios

    cnpm install axios --save-dev
    

    安装其他插件的时候,可以直接在 main.js 中引入并 Vue.use(),但是 axios 并不能 use,只能每个需要发送请求的组件中即时引入为了解决这个问题,有两种开发思路,一是在引入 axios 之后,修改原型链,二是结合 Vuex,封装一个 aciton。这里只说修改原型链的方式改写原型链
    首先在 main.js 中引入 axios

    import axios from 'axios'
    

    这时候如果在其它的组件中,是无法使用 axios 命令的。所以我们将 axios 改写为 Vue 的原型属性

    Vue.prototype.$http= axios
    

    在 main.js 中添加了这两行代码之后,就能直接在组件的 methods 中使用 $http命令例如

    methods: { show() { this.$http({ method: 'get', url: '/user', data: { name: 'virus' } }) }
    

    配置 axios
    实际上只有 url 是必须的,完整的 api 可以参考https://www.kancloud.cn/yunye/axios/234845

    axios.post('/user', { params:{ name:"virus" }})
    

    完整的请求还应当包括 .then 和 .catch
    .then(function(res){ console.log(res) }) .catch(function(err){ console.log(err) })

    当请求成功时,会执行 .then,否则执行 .catch这两个回调函数都有各自独立的作用域,如果直接在里面访问 this,无法访问到 Vue 实例,这时只要添加一个 .bind(this) 就能解决这个问题

    .then(function(res){ console.log(this.data) }.bind(this))
    

    另外,补充
    vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://40.00.100.100:3002/是要跨域的,相当于浏览器设置了一到门槛,会报错XMLHTTPRequest can not load http://40.00.100.100:3002/. Response to preflight request doesn’t pass access control…. 为什么跨域同源非同源自己去查吧,在webpack配置一下proxyTable就OK了,如下 config/index.js

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

    相关文章

      网友评论

        本文标题:vue-cli 引入axios即跨域使用

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