Vuex Axios 헤더에서 Uncaught TypeError를 반환함: 개체(...)가 Vuex의 함수가 아님
저는 현재 Nuxt를 사용하고 있으며 앱에 axios를 사용하여 중앙 ApiClient를 만들었습니다.
services/apiClient.js
import axios from "axios";
import store from '../store/index';
const token = () => {
return store().getters.getToken;
};
const axiosClient = axios.create({
baseURL: "this-is-a-url",
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
'X-Api-Key': token() // this returns error: Object(...) is not a function from Vuex
}
});
axiosClient.interceptors.request.use(function (config) {
console.log(token()); // this prints the token type string
return config;
}, function (error) {
return Promise.reject(error);
});
사용할 때token()
axios 헤더에서 다음 오류가 발생합니다.Uncaught TypeError: Object(...)
하지만 xios 인터셉트에서 호출하면 올바른 토큰 유형 String이 나옵니다.
store/index.js
import Vuex from 'vuex';
import * as sessions from './modules/sessions';
const store = () => {
return new Vuex.Store({
getters: {
isAuthenticated() {
return sessions.state.token != null;
}
},
modules: {
sessions
}
});
};
export default store;
매장/매장/매장/매장
import axios from 'axios';
export const state = {
token: localStorage.getItem('token') || null,
};
export const mutations = {
SET_TOKEN(state, token) {
state.token = token;
}
};
export const actions = {
login({ commit }) {
return new Promise((resolve, reject) => {
axios.get(`/retrieveKey`)
.then(response => {
localStorage.setItem('token', response.data.value);
commit('SET_TOKEN', response.data.value);
resolve(response.data);
})
.catch(error => {
reject(error);
});
});
},
logout({ commit }, context) {
localStorage.removeItem('token');
window.location.reload();
}
};
export const getters = {
getToken(state) {
return state.token;
}
};
최신 답변
console.log를 입력하여 store(), store().geters 및 store().geters.get의 값을 디버깅할 수 있습니다.토큰 내부의 토큰은 아래와 같이 기능하며, axiosClient 호출과 인터셉트 호출의 차이 값을 비교합니다.
const token = () => {
const store = store();
const getters = store.getters;
const getToken = getter.getToken;
console.log(store, getters, getToken)
return getToken;
};
"this returns error: Object(...) is not function from Vuex" 오류 메시지는 토큰이 axiosClient에서 null과 같기 때문입니다.
localStorage.getItem('token')의 초기 상태가 null/undefined이므로 로그인이 완료되기 전에 값이 null이 되기 때문입니다.
export const state = {
token: localStorage.getItem('token') || null,
};
게터즈 오브 Vuex 가이드를 참조하십시오. 게터즈는 다음에 노출됩니다.store.getters
값을 속성으로 액세스할 수 있습니다.
토큰 값은 다음을 통해 얻을 수 있습니다.store.getters.getToken
대신에store().getters.getToken
?
언급URL : https://stackoverflow.com/questions/55323721/vuex-axios-headers-returns-uncaught-typeerror-object-is-not-a-function-fro
'programing' 카테고리의 다른 글
MySQL이 밀리초/마이크로초 정밀도를 지원하지 않는 이유는 무엇입니까? (0) | 2023.08.11 |
---|---|
스프링 응용 프로그램이 패키지 외부에서 시작되지 않음 (0) | 2023.08.11 |
스토리보드에서 인터페이스를 설정하는 Swift의 UIViewController에 대한 사용자 정의 init (0) | 2023.08.11 |
php mysql 쿼리를 사용하여 양식 데이터를 데이터베이스에 삽입할 수 없습니다. (0) | 2023.08.11 |
유니코드 지원에 wchar_t가 필요합니까? (0) | 2023.08.11 |