Vue.js和Axios:转换请求返回未定义的数据

时间:2018-07-25 08:28:09

标签: javascript vue.js request axios

我试图使用transformRequest和transformResponse以便在渲染数据时显示加载程序。完成此操作后,它可以正常运行,但是现在看来我的POST和PATCH请求没有得到正确处理。控制台上没有错误消息,但是当我尝试修改某些实体(并发送PATCH请求)时,没有任何反应。删除transformRequest函数时,可以发送POST和PATCH。

有人可以解释我做错了吗?

更新!这是我在http / index.js中添加的内容:

...
transformRequest(data) {
 console.log(data); // returns undefined
 store.dispatch('loadingData');
 console.log(data) // returns undefined
 return console.log(JSON.stringify(data)); // returns undefined
},
transformResponse(data) {
 store.dispatch('finishLoadingData');
 const parsedData = JSON.parse(data);
 if (parsedData.error === 'Access denied') {
   cookies.remove('access_token');
   window.location = `${config.mainSite}/login`;
 }
 return parsedData;
},
...

这是商店:

export default {
 state: {
  loading: false,
 },
 actions: {
  loadingData({ commit }) {
   commit('LOADING_DATA');
 },
 finishLoadingData({ commit }) {
   commit('FINISH_LOADING_DATA');
 },
},
mutations: {
 LOADING_DATA(state) {
  state.loading = true;
 },
 FINISH_LOADING_DATA(state) {
  state.loading = false;
 },
},
getters: {
  getLoading(state) {
   return state.loading;
  },
 },
};

1 个答案:

答案 0 :(得分:0)

当我们使用AxiostransformRequesttransformResponse时,它接受的是函数数组,而不是单个函数。你可以尝试一下吗?

...
transformRequest: [(data) => {
    store.dispatch('loadingData');

    return data;
}],

transformResponse: [(data) => {
    store.dispatch('finishLoadingData');

    const parsedData = JSON.parse(data);

    if (parsedData.error === 'Access denied') {
        cookies.remove('access_token');
        window.location = `${config.mainSite}/login`;
    }
    return parsedData;
}],
...