Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 导入自定义axios实例时Vuex模块不工作_Typescript_Vue.js_Axios_Vuex - Fatal编程技术网

Typescript 导入自定义axios实例时Vuex模块不工作

Typescript 导入自定义axios实例时Vuex模块不工作,typescript,vue.js,axios,vuex,Typescript,Vue.js,Axios,Vuex,我已在Vuex模块中声明了一个操作: storeBudgets(store: ActionContext<State, any>) { return axiosAuth.get('/budget') .then((res) => { store.commit('setBudgets', res.data.budgets); }); } 我在其他vuex store模块中使用此axios实例时没有任何问题,但对于此

我已在Vuex模块中声明了一个操作:

storeBudgets(store: ActionContext<State, any>) {
    return axiosAuth.get('/budget')
        .then((res) => {
            store.commit('setBudgets', res.data.budgets);
        });
}
我在其他vuex store模块中使用此axios实例时没有任何问题,但对于此特定模块中的此特定操作,我遇到以下错误:

TypeError: rawModule is undefined
只要我对axiosAuth的引用进行注释,错误就会消失

我认为这个问题与我引用axios拦截器中的存储有关,因为同时注释
config.headers
行会使应用程序加载没有任何问题

我正在从TypeScript代码库中的一个JavaScript项目迁移此逻辑,并且以前的实现没有任何问题

  • 这与打字脚本传输有关吗
  • 我可以使用哪些替代方法来代替拦截器在HTTP请求的头中设置JWT令牌

我认为这里的问题是TypeScript如何尝试传输依赖项的导入

我只是猜测,但我在axios文件中引用了存储,在vuex存储模块中引用了axios。 这可能会创建某种循环引用循环,最终引发错误

为了解决我的问题,我在创建vuex存储之后,在
store.ts
文件中移动了axios拦截器的设置

import Vue from 'vue';
import Vuex from 'vuex';

import axiosAuth from "@/axios-auth";

Vue.use(Vuex);

const vuexStore = new Vuex.Store({
    state: {

    },
    modules: {
        // ...
    },
});

axiosAuth.interceptors.request.use((config) => {
    config.headers['x-access-token'] = vuexStore.getters.getUserToken;
    return config;
});

export default vuexStore;

我不确定这是否是可能的最干净的解决方案,但我很高兴它解决了我的主要问题。

其余的错误在哪里?您试图在何处使用
rawModule
?@Phil这就是错误所在,而rawModule是Vuex/Vuejs代码的内部部分。做得好,解决这个问题的基本原理是将引用存储的任何代码片段放在store.ts本身中。我再次感到可能有一个更干净的解决办法somewhere@ExisZhang你找到清洁剂了吗?
import Vue from 'vue';
import Vuex from 'vuex';

import axiosAuth from "@/axios-auth";

Vue.use(Vuex);

const vuexStore = new Vuex.Store({
    state: {

    },
    modules: {
        // ...
    },
});

axiosAuth.interceptors.request.use((config) => {
    config.headers['x-access-token'] = vuexStore.getters.getUserToken;
    return config;
});

export default vuexStore;