【问题标题】:Vue.js 2. How to use Vuex in axios interceptorVue.js 2. 如何在axios拦截器中使用Vuex
【发布时间】:2018-11-01 16:18:26
【问题描述】:

我有一个拦截器,我想在其中使用 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' 也无济于事。我已经尝试了几乎所有的导入方式,我知道。没有任何帮助。

我错过了什么?

【问题讨论】:

  • 您的商店是在拦截器回调之外还是仅在回调中未定义?
  • @Lunfel 看起来都像

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


【解决方案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
    })
  }
}

【讨论】:

  • 但问题是,我根本没有商店。这是undefined
猜你喜欢
  • 2018-06-05
  • 2020-09-20
  • 2021-05-10
  • 2021-01-18
  • 2022-01-25
  • 2019-03-15
  • 2022-11-03
  • 2019-12-19
  • 2020-09-28
相关资源
最近更新 更多