Javascript 如何为不同的承载令牌声明2个axios实例?
我想声明2个axios实例,所以1表示使用access\u令牌的API调用,另1表示使用refresh\u令牌 我有这样一个代码: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
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,抱歉,这太尴尬了。我修好了,现在应该可以用了。真的谢谢你的帮助!!答案很容易理解