【发布时间】:2021-11-16 03:34:17
【问题描述】:
我已经构建了一个 VueJS 应用程序,它使用 Vue-Axios 与 Laravel API 进行通信。
在我的项目中,我有一个 api.js 文件,其中包含以下代码:
import axios from "axios";
export function apiRequestProtocol(token = null) {
var api_instance = axios.create({
baseURL: "http://127.0.0.1:8000/api/",
});
if (token) {
api_instance.interceptors.request.use(
(config) => {
config.headers.Authorization = `Bearer ${token}`;
return config;
},
(error) => {
return Promise.reject(error);
}
);
}
return api_instance;
}
apiRequireProtocol 函数被导入到每个需要向 Laravel API 发出请求的 Vue 组件中。
如你所见,每次组件使用apiRequestProtocol(),都会创建一个新的Axios实例。
我这样做是因为来自 Axios 的一些“请求”需要access_token,而其他不需要。
我曾尝试对每个请求使用相同的 Axios 实例,只是更改其标头,但我无法成功。如果您知道如何根据请求仅使用一个实例来更改它(如果需要令牌或不需要),请告诉我如何。
此外,我想知道是否应该在使用这些实例后“删除”它们,或者是否有更好的方法来做到这一点。
谢谢!
我的 package.json:
{
...
"dependencies": {
"@vueuse/head": "^0.6.0",
"axios": "^0.21.1",
"core-js": "^3.6.5",
"vue": "^3.0.0",
"vue-axios": "^3.2.5",
"vue-router": "^4.0.0-0",
"vuex": "^4.0.0-0",
"vuex-persistedstate": "^4.1.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-router": "~4.5.0",
"@vue/cli-plugin-vuex": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"@vue/compiler-sfc": "^3.0.0",
"sass": "^1.26.5",
"sass-loader": "^8.0.2"
}
}
【问题讨论】:
-
"为每个请求创建一个 axios 实例是否正确?" - 不。 “我曾尝试对每个请求使用相同的 Axios 实例,只是更改其标头,但我无法成功地做到这一点”——考虑用你不成功的尝试重新提出这个问题。目前你有 XY 问题。
标签: javascript ajax api vue.js axios