Топор-перехватчик ios всегда разрешает обещание - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь перехватить топор ios после вызова в vue.

Сначала я создаю топор ios в топоре ios. js

import Vue from 'vue'
import axios from 'axios'

const axiosInstance = axios.create({
  baseURL: `http://localhost:8081/` // the url of our server
})

Vue.prototype.$axios = axiosInstance

export { axiosInstance }

Здесь вы видите вызов топора ios и перехватчиков

import { axiosInstance } from '../boot/axios'

export default {
  validateUsers: async (username, password) => {
    // var usersPromise = axiosInstance.post('/users', {
    axiosInstance.post('/users', {
      params: {
        name: username,
        password: password
      }
    })
    axiosInstance.interceptors.response.use((response) => {
      console.log('RESPONSE', response)
      if (response.status === 401) {
        console.log('You are not authorized')
        return Promise.reject(response)
      } else if (response.status === 200) {
        console.log('response SUCC')
        return response
      }
    }, (error) => {
      console.log('ERROR RECEIVED BY AXIOS', error.response)
      if (error.response && error.response.status === 401) {
        return Promise.reject(error.response.status)
      }
      console.log('ERR RES', error.message)
      return Promise.reject(error.message)
    })
  }
}

И в моем Vue компоненте я проверяю обещание, подобное этому

usersAPI.validateUsers(username, password)
    .then(ok => {
      console.log('ok', ok)
      this.valForm(this.$refs.loginForm)
    }, (error) => {
      if (error === 401) {
        this.getMessage('error', 'User or password wrong')
        return error
      }
      this.getMessage('error', 'Something went wrong. Error: ' + error)
      return error
    })

В моем nodeJS код Я возвращаю 401, если логин пользователя не верный, и я вижу, что CORS сначала отправляет вызов OPTION, который возвращает 204, а затем я отправляю 401 (что правильно).

Что я ожидаем

Ax ios перехватчики обрабатывают ошибку 401 и отклоняют обещание

Что происходит

Функция validateUsers() возвращает ' хорошо '(обещание выполнено) вместо того, чтобы быть отклоненным топором ios.

Почему Ax ios не обрабатывает ошибку 401?

1 Ответ

1 голос
/ 17 февраля 2020

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

    import Vue from 'vue'
    import axios from 'axios'

    const axiosInstance = axios.create({
      baseURL: `http://localhost:8081/` // the url of our server
    })

    axiosInstance.interceptors.response.use((response) => {
      console.log('RESPONSE', response)
      if (response.status === 401) {
        console.log('You are not authorized')
        return Promise.reject(response)
      } else if (response.status === 200) {
        console.log('response SUCC')
        return response
      }
    }, (error) => {
      console.log('ERROR RECEIVED BY AXIOS', error.response)
      if (error.response && error.response.status === 401) {
        return Promise.reject(error.response.status)
      }
      console.log('ERR RES', error.message)
      return Promise.reject(error.message)
    })

    Vue.prototype.$axios = axiosInstance

    export { axiosInstance }
    import { axiosInstance } from '../boot/axios'

    export default {
      validateUsers: async (username, password) => {
        return axiosInstance.post('/users', {
          params: {
            name: username,
            password: password
          }
        })
      }
    }

А в вашем Vue компоненте обещание должно быть разрешено или отклонено правильно.


    usersAPI.validateUsers(username, password)
        .then(ok => {
          console.log('ok', ok)
          this.valForm(this.$refs.loginForm)
        }, (error) => {
          if (error === 401) {
            this.getMessage('error', 'User or password wrong')
            return error
          }
          this.getMessage('error', 'Something went wrong. Error: ' + error)
          return error
        })
...