gpt4 book ai didi

django - 在 Vue 3 中设置全局 Axios header

转载 作者:行者123 更新时间:2023-12-04 07:31:07 28 4
gpt4 key购买 nike

我正在尝试使用 Axios 来访问我的后端(Django),但是我在设置全局 header 以在 header 中包含 CSRF token 时遇到了一些麻烦。
这是到达我的服务器:

import axios from "axios";

async function loadCards() {
var instance = axios.create({
xsrfCookieName: window.rootData.csrfToken,
xsrfHeaderName: "X-CSRFTOKEN",
});
return await instance.post(window.rootData.urlpaths.loadCards, {
'state': props.state.label,
'filter': props.filter.label,
'project': window.rootData.project
})
}
但是,我希望这些 header 适用于我所有的内部 api 请求。所以我想我会在一个单独的文件中建立它们:
axios-site.js
import axios from "axios";

var siteApi = axios.create({
xsrfCookieName: window.rootData.csrfToken,
xsrfHeaderName: "X-CSRFTOKEN",
});

export default {
siteApi
}
Vue 组件
import siteApi from "@/axios-site";

setup () {

async function loadCards() {
return await siteApi.post(window.rootData.urlpaths.loadCards, {
'state': props.state.label,
'filter': props.filter.label,
'project': window.rootData.project
})
}

}
这是控制台中的错误:
Uncaught (in promise) TypeError: _axios_site__WEBPACK_IMPORTED_MODULE_4__.default.post is not a function
at _callee$ (ActionColumn.vue?ba4f:97)
at tryCatch (runtime.js?96cf:63)
at Generator.invoke [as _invoke] (runtime.js?96cf:293)
at Generator.eval [as next] (runtime.js?96cf:118)
at asyncGeneratorStep (asyncToGenerator.js?1da1:3)
at _next (asyncToGenerator.js?1da1:25)
at eval (asyncToGenerator.js?1da1:32)
at new Promise (<anonymous>)
at eval (asyncToGenerator.js?1da1:21)
at _loadCards (ActionColumn.vue?ba4f:80)
当我通过外部文件运行它时,似乎有些东西丢失了。我确定我遗漏了一些明显的东西,但我似乎无法确定它。我找到了另一个遵循类似逻辑的公认答案 here ,但它不适用于我的情况。 webpack有没有可能搞砸了?

最佳答案

您应该像这样导出 axios 实例:

export default siteApi
然后在 main.js 中将其添加到 globalProperties :
import siteApi from "@/axios-site";
...
app.config.globalProperties.siteApi=siteApi
在任何子组件中,您都可以访问该属性:
import { getCurrentInstance } from 'vue'

const MyComponent = {
setup() {
const internalInstance = getCurrentInstance()

const {siteApi}= internalInstance.appContext.config.globalProperties

async function loadCards() {
return await siteApi.post(window.rootData.urlpaths.loadCards, {
'state': props.state.label,
'filter': props.filter.label,
'project': window.rootData.project
})
}
}
}
在诸如挂载钩子(Hook)之类的选项 api 中:
mounted(){
this.siteApi.post(...)
}

关于django - 在 Vue 3 中设置全局 Axios header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67927352/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com