Javascript 如何为不同的承载令牌声明2个axios实例?

Javascript 如何为不同的承载令牌声明2个axios实例?,javascript,axios,es6-modules,Javascript,Axios,Es6 Modules,我想声明2个axios实例,所以1表示使用access\u令牌的API调用,另1表示使用refresh\u令牌 我有这样一个代码: import {axiosAccessClient,axiosRefreshClient} from "./config"; static async access(url,body) { return await axiosAccessClient.post(url, body) .then(function (resp

我想声明2个axios实例,所以1表示使用access\u令牌的API调用,另1表示使用refresh\u令牌

我有这样一个代码:

import {axiosAccessClient,axiosRefreshClient} from "./config";

static async access(url,body) {

        return await axiosAccessClient.post(url, body)
            .then(function (response) {
                return response;
        }).catch(function (error) {
            throw error;
        })
    }

static async refresh(url,body){
        return await axiosRefreshClient.post(url, body)
            .then(function (response) {
                return response;
            }).catch(function (error) {
                throw error;
            })
    }
config.js

因此,在我的Request.js中,我做了如下操作:

import {axiosAccessClient,axiosRefreshClient} from "./config";

static async access(url,body) {

        return await axiosAccessClient.post(url, body)
            .then(function (response) {
                return response;
        }).catch(function (error) {
            throw error;
        })
    }

static async refresh(url,body){
        return await axiosRefreshClient.post(url, body)
            .then(function (response) {
                return response;
            }).catch(function (error) {
                throw error;
            })
    }
但当我运行应用程序时,它会在Request.js中的访问点崩溃。显示以下错误:

_AxiosConfig\uuuu网页包\u导入的\u模块\uuuuuu。axiosAccessClient.post不是函数

但如果我做了以下事情:

在config.js中导出默认axiosAccessClient

从Request.js中的./config导入axiosAccessClient

然后代码开始工作,这很奇怪,但是我无法通过Request.js中的refresh访问axiosRefreshClient

问题:

谁能告诉我为什么会这样?我读了所有这些示例,但仍然无法理解:

等等

如何解决这个问题??从单个文件导出多个函数

您的两个函数axiosAccessClient和另一个函数返回axios实例,但函数本身不是axios实例,这就是您无法调用的原因。在它上发布。您应该在同一模块中创建两个客户端,并将它们保存为常量变量,然后导出实例,而不是导出创建实例的函数。每次您希望发出请求时都重新创建同一实例是没有意义的。实例的参数不变,因此保存实例更好。

您的config.js导出函数;您需要重写它,以便它导出函数调用的结果,即实例

// change name of functions
function generateAccessClient() {
  ..
}

// create instances
const axiosAccessClient = generateAccessClient();
const axiosRefreshClient = generateRefreshClient();

// export them
export {
    axiosAccessClient,
    axiosRefreshClient
}
通过这种方式,您可以同时导入这两者。默认导出与问题无关,您只是意外地在末尾添加了

另一种方法是:

const axiosAccessClient = (function () {
    ...
})();
axiosRefreshClient也是如此


现在您的原始代码可以工作了。

等待axiosAccessClient.postrl,body失败,因为axiosAccessClient是一个函数。你需要等待axiosAccessClient.postrl,bodyYeah,抱歉,这太尴尬了。我修好了,现在应该可以用了。真的谢谢你的帮助!!答案很容易理解