axios каждый раз делает два запроса в моем приложении vue

#javascript #vue.js #ionic-framework #axios #vuejs3

Вопрос:

Я использую свое приложение почти везде, когда я вызываю запрос Axios, чтобы получить данные или опубликовать их, Axios отправляет два запроса вместо одного. Я не нашел ничего неправильного в своем коде.

Вот мой компонент

 <template>
  <ion-page>
    <ion-header>
      <ion-toolbar>
        <ion-title>My Right Hand Men</ion-title>
      </ion-toolbar>
    </ion-header>
    <ion-content :fullscreen="true">
      <ion-header collapse="condense">
        <ion-toolbar>
          <ion-title size="large">My Right Hand Men</ion-title>
        </ion-toolbar>
      </ion-header>
      <ion-list>
        <ion-item v-for="(right_hand_man, index) in right_hand_men" :key="index">
          <ion-label text-wrap>{{ right_hand_man.id }} - {{ right_hand_man.name }}</ion-label>
          <ion-text slot="end" @click="remove(right_hand_man.id)" color="danger">Remove</ion-text>
          <ion-text

            slot="end"
            @click="() => router.push(`/staff/${right_hand_man.id}/right_hand_man`)"
            color="warning"
          >View</ion-text>
        </ion-item>
      </ion-list>
    </ion-content>
  </ion-page>
</template>

<script >
import {
  IonPage,
  ionText,
  IonHeader,
  IonToolbar,
  IonTitle,
  IonContent,
  IonItem,
  IonList,
  IonLabel,
} from "@ionic/vue";
import ApiService from "@/services/api.service";
import { TokenService } from "@/services/token.service";
import { useRouter } from "vue-router";
export default {
  name: "Tab3",
  data() {
    return {
      right_hand_men: "",
    };
  },
  components: {
    IonHeader,
    ionText,
    IonToolbar,
    IonTitle,
    IonContent,
    IonPage,
    IonItem,
    IonList,
    IonLabel,
  },
  methods: {
    remove(rhm_id) {
      ApiService.post(`api/gangBoss/remove-rhm`, { rhm: rhm_id }).then(
        async () => {
          await this.getRightHandMen();
        }
      );
    },
    getRightHandMen: function () {
      const boss_id = TokenService.getUserInfo().id;

      return ApiService.get(`/api/gangBoss/get-boss-rhm/${boss_id}`).then(
        (response) => {
          this.right_hand_men = response.data;
          console.log(this.right_hand_men);
        }
      );
    },
  },
  setup() {
    const router = useRouter();
    return { router };
  },
  created() {
    this.getRightHandMen();
  },
 
};
</script>
<style scoped>
ion-list ion-item {
  background-color: #f0f8ff;
  /* margin-top: 7px; */
  margin-bottom: 0px;
}
</style>
 

У меня есть глобальный перехватчик для запроса axios, который выглядит так

 import axios from "axios";
import {store} from '@/store';
import {TokenService} from "@/services/token.service";
import {loadingController} from '@ionic/vue';


const ApiService = {
    _requestInterceptor: 0,
    _401interceptor: 0,

    init(baseURL)
    {
        axios.defaults.baseURL = baseURL;
    },

    setHeader() {
        axios.defaults.headers.common[
            "Authorization"
            ] = `Bearer ${TokenService.getToken()}`;
            axios.defaults.headers.common['Access-Control-Allow-Origin'] = '*';
         
    },

    removeHeader() {
        axios.defaults.headers.common = {};
    },

    get(resource ) {
      
        return axios.get(resource);
    },

    post(resource, data) {
        return axios.post(resource, data);
    },

    put(resource, data) {
        return axios.put(resource, data);
    },

    delete(resource) {
        return axios.delete(resource);
    },

    customRequest(data) {
        return axios(data);
    },

    mountRequestInterceptor() {
        
        this._requestInterceptor = axios.interceptors.request.use(async config => {
            console.log(config.url)
           if(config.url != "/api/staff/get-notifications" amp;amp; config.url!="/api/staff/save-fcm-token" amp;amp; config.url!="/api/staff/get-work-order-id"){
            console.log("show loading");
            const loading = await loadingController.create({
                message: 'Please wait...'
            });
 
            await loading.present();
        }
            return config;
        });
        
    },

    mount401Interceptor() {
        this._401interceptor = axios.interceptors.response.use(
          async   response => {
            if(response.config.url != "/api/staff/get-notifications" amp;amp; response.config.url!="/api/staff/save-fcm-token" amp;amp; response.config.url!="/api/staff/get-work-order-id"){
             await   loadingController.dismiss().then(r => console.log(r));
               console.log('close')
            }
                return response;
            },
            async error => {
                if(error.config.url != "/api/staff/get-notifications" amp;amp; error.config.url!="/api/staff/save-fcm-token" amp;amp; error.config.url!="/api/staff/get-work-order-id"){
               await loadingController.dismiss().then(r => console.log(r));
                }
                if (error.request.status === 401) {
              
                    if (error.config.url.includes("/api/staff/token")) {
                        await store.dispatch("/api/staff/logout");
                    
                        throw error;
                        
                    } else {
                        try {
                      
                            await store.dispatch("auth/refreshToken");
                        
                            return this.customRequest({
                                method: error.config.method,
                                url: error.config.url,
                                data: error.config.data
                            });
                        } catch (e) {
                        
                            throw error;
                           
                        } 
                    }
                }
              
                throw error;
            }
        );
    },

    unmount401Interceptor() {
        axios.interceptors.response.eject(this._401interceptor);
    }
}

export default ApiService;

 

Я не знаю, где что-то идет не так, я вижу, что есть больше людей, испытывающих ту же проблему, но я не видел правильного решения, возможно, я что-то пропустил

Комментарии:

1. происходит ли это только в ионной лаборатории?