简体   繁体   English

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

[英]Vue.js and Axios: Transform Request returns undefined data

I was trying to use transformRequest and transformResponse in order to display a loader while data is rendering. 我试图使用transformRequest和transformResponse以便在渲染数据时显示加载程序。 When I have done this, it worked perfectly but it is appeared that my POST and PATCH requests are not processed properly now. 完成此操作后,它可以正常运行,但看来我的POST和PATCH请求现在没有正确处理。 There are no error messages on console but when I try to modify some entity (and send PATCH request), nothing happens. 控制台上没有错误消息,但是当我尝试修改某些实体(并发送PATCH请求)时,没有任何反应。 When I delete transformRequest function, I can send POST and PATCH. 删除transformRequest函数时,可以发送POST和PATCH。

Can somebody explain what I did wrong? 有人可以解释我做错了什么吗?

UPDATE! 更新! Here is what I added in http/index.js: 这是我在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;
},
...

Here is the store: 这是商店:

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;
  },
 },
};

As we use Axios , transformRequest and transformResponse accepts an array of functions and not a single function. 当我们使用Axios时transformRequesttransformResponse接受函数数组,而不是单个函数。 Can you try this: 你可以尝试一下:

...
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;
}],
...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM