Vue.js 2.如何在axios拦截器中使用Vuex

时间:2018-05-22 19:47:16

标签: javascript vue.js axios vuex es6-modules

我有一个拦截器,我想使用Vuex个getter,但是,当我导入store时,我会收到undefined

这是我的src/plugins/http.js代码:

import Vue from 'vue'
import store from '../store'
import axios from 'axios'


axios.interceptors.request.use(
    (config) => {
        if (store.getters['auth/hasAccessToken']) {
            config.headers['Authorization'] = 'Bearer ' + store.getters['auth/accessToken']
        }
    }
);

这是我的src/store/index.js代码:

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

Vue.use(Vuex);

export default new Vuex.Store({
    //...
});

import store from '../store'也没有帮助。我知道,我已经尝试了几乎所有的导入方式。什么都没有帮助。

我想念什么?

1 个答案:

答案 0 :(得分:1)

看起来你正在使用模块来命名你的getter。为了找出问题所在,为什么不首先尝试不使用模块,如store.getters.hasAccessToken...accessToken。如果可以,那么可能是您正确设置了模块,特别是您可能错过了模块中的namespaced: true。请参阅:https://vuex.vuejs.org/modules.html

不要忘记在拦截器中返回配置对象。

对于它的价值,我使用类似的东西,它没有模块就可以正常工作。看起来像这样:

import axios from 'axios'
import store from '../store'

export default class BaseDataService {
  constructor () {
    this.http = axios.create({baseURL: '/api/'})

    this.http.interceptors.request.use(config => {
      config.headers.Authorization = 'Bearer ' + store.state.principal.token
      return config
    })
  }
}