如何在同一个应用程序中使用 2 个具有不同 baseURL 的 Axios 实例(vue.js)

新手上路,请多包涵

我正在尝试学习 vue.js,所以我制作了一个小应用程序,它显示来自 API 的新闻文章,并在另一个视图中允许用户登录到另一个服务器。

为此,我正在使用 Axios。我知道我在某些时候让它工作得很好,但是今天开始我的项目时,让两个 api 同时工作是不可能的。

这是我的登录服务:

 import axiosTrainingAPI from 'axios'

axiosTrainingAPI.defaults.baseURL = 'https://api.example.com'

const trainingAPI = {
  login (credentials) {
    return new Promise((resolve, reject) => {
      axiosTrainingAPI.post('/services/auth.php', credentials)
        .then(response => {
          resolve(response.data)
        }).catch(response => {
          reject(response.status)
        })
    })
  }
}

export default trainingAPI

这是我的新闻服务:

 import axiosGoogleNewsAPI from 'axios'

axiosGoogleNewsAPI.defaults.baseURL = 'https://newsapi.org'

const googleNewsAPI = {
  getPosts (newsId) {
    return new Promise((resolve, reject) => {
      axiosGoogleNewsAPI.get(`/v2/everything?q=${newsId}&sortBy=publishedAt&apiKey=***********`)
        .then(response => {
          resolve(response.data)
        }).catch(response => {
          reject(response.status)
        })
    })
  }
}

export default googleNewsAPI

这两个服务都在不同的 JS 文件中,并在不同的 vue 文件中导入,但现在它们似乎无法共存,并且总是有一个覆盖另一个(并不总是相同)的 baseURL,就像 Axios 实例一样两种情况。所以有时第一个服务使用第二个的baseURL,有时它是第二个使用第一个的baseURL …

我不确切知道“导入”的范围,因为它对我来说很新,但两个实例都在不同的文件中,有不同的名称,所以我真的不明白它们是如何混淆的。除非“导入”总是调用模块的同一个实例,但是我如何使用 2 个 API?为什么它昨天起作用了……我很困惑。

原文由 manu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 687
2 个回答

您可以简单地使用多个 Axios 实例,每个实例都有自己的配置。例如,

 import axios from "axios";

// For common config
axios.defaults.headers.post["Content-Type"] = "application/json";

const mainAxios = axios.create({
    baseURL: 'https://some-domain.example/api/'
});

const customAxios = axios.create({
    baseURL: 'https://some-custom-domain.example/api/'
});

export {
  mainAxios,
  customAxios
};

原文由 Saahil M 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题