从 vue-resource 切换到 axios

Posted

技术标签:

【中文标题】从 vue-resource 切换到 axios【英文标题】:Switching from vue-resource to axios 【发布时间】:2017-06-12 07:20:41 【问题描述】:

使用 vue-resource,我们可以像这样在main.js 中设置根 url:

Vue.http.options.root = 'http://localhost:3000/api'

我尝试将其替换为:

axios.defaults.baseURL = 'http://localhost:3000/api';
Vue.prototype.$http = axios

但是,现在我的 post 调用没有按预期工作,Vue.http.post 引发错误。

这是如何实现的?

【问题讨论】:

在实例方法中不要使用绝对url路径,应该使用相对url 【参考方案1】:

使用 axios,可以创建另一个实例having a custom config

var my_axios = axios.create(
  baseURL: 'http://localhost:3000/api',
);

从这里可以使用my_axios 进行操作。您可以将自定义 axios 实例原型化为 Vue:

Vue.prototype.$http = my_axios

【讨论】:

【参考方案2】:
import axios from 'axios';

export const HTTP = axios.create(
  baseURL: `http://localhost:3000/api/`,
  headers: 
    Authorization: 'Bearer token'
  
)

您现在可以像这样使用 HTTP

<script>
import HTTP from './http-common';

export default 
  data: () => (
    posts: [],
    errors: []
  ),

  created() 
    HTTP.get(`posts`)
    .then(response => 
      this.posts = response.data
    )
    .catch(e => 
      this.errors.push(e)
    )
  

</script>

【讨论】:

如果你想在 vue-resource 中访问 this.$http,你可以设置 Vue.prototype.$http = axios。

以上是关于从 vue-resource 切换到 axios的主要内容,如果未能解决你的问题,请参考以下文章

Vue---从后台获取数据vue-resource的使用方法

例子:Vue 配合 vue-resource 从接口获取数据

《转》vue更新到2.0之后vue-resource不在更新,axios的使用

vue-resource:在拦截 ajax 错误时捕获“未捕获(在承诺中)”

如何在 vuex 商店中使用 vue-resource ($http) 和 vue-router ($route)?

Vue-resource和Axios对比以及Vue-axios