首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Axios拦截器总是承诺

Axios拦截器总是承诺
EN

Stack Overflow用户
提问于 2020-02-17 06:35:12
回答 1查看 1.9K关注 0票数 1

我正试图拦截vue中的axios post呼叫。

首先,我在axios.js中创建Axios

代码语言:javascript
复制
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 }

在这里您可以看到axios调用和拦截器。

代码语言:javascript
复制
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组件中,我检查了这样的承诺

代码语言:javascript
复制
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首先发送返回204的选项调用,然后发送401 (这是正确的)。

我所期望的

Axios拦截器处理401错误并拒绝承诺

发生了什么

validateUsers()函数返回'ok‘(允诺被解析),而不是被axios拒绝。

为什么Axios不处理401错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-17 11:08:36

我认为您应该等待axios调用并返回使代码工作的承诺。

代码语言:javascript
复制
    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 }
代码语言:javascript
复制
    import { axiosInstance } from '../boot/axios'

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

在您的Vue组件中,承诺应该被正确地解决或拒绝。

代码语言:javascript
复制
    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
        })
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60257049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档